全排列(permutation)

排列组合概念

排列,就是指从给定n个数的元素中取出指定m个数的元素,进行排序

组合,则是指从给定n个数的元素中仅仅取出指定m个数的元素,不考虑排序

全排列

以数字为例,全排列就是从“第一个数字”起,“每个数字”分别与它“后面的数字”交换,复杂度为O(n!)

图示

  1. A依次和BC交换
  2. 交换一次后不急(如AB交换后,不急着交换AC),target后移,再依次交换
  3. 直到target=最后一个数时,停止,输出
  4. 返回上一步(很明显,用递归)接着做,此时注意,要把换了的数再还回来

代码

package permutate;

public class Common {
static void swap(char str[], int a, int b) {
if (a == b) {
return;
}
char temp = str[a];
str[a] = str[b];
str[b] = temp;
} static void printArr(char str[]) {
for (char c : str) {
System.out.print(c + " ");
}
System.out.println();
}
}

  

package permutate;

public class 图解全排列 {
static int count = 0; static void permutation(char str[], int t) {
if (t == str.length - 1) {
// 3.停止
System.out.print(++count + ": ");
Common.printArr(str);
return;
} for (int i = t; i < str.length; i++) {
Common.swap(str, t, i);
// 2.递归
permutation(str, t + 1);
// 4.返回上层,换回来
Common.swap(str, t, i);
}
} public static void main(String[] args) {
char str[] = new String("ABC").toCharArray();
// 1.从0开始
permutation(str, 0);
}
}

JAVA递归实现全排列的更多相关文章

  1. Java用递归实现全排列,详细

    package edu.cqu.algorithmTest; import java.util.Scanner; // 全排列,递归实现 public class Main8 { public sta ...

  2. Java递归列出目录下全部文件

    Java递归列出目录下全部文件 /** * 列出指定目录的全部内容 * */ import java.io.*; class hello{ public static void main(String ...

  3. Java 递归调用 recursive 给一个参数 返回一大堆

    需求: 需要组装成对象多层嵌套式的 json字符串; 想到使用 递归来完成这个多层嵌套: 憋了四个小时,终于写出来了; 先看效果: 数据库中的数据: 拼装后的效果: [ EmpVO{ ename='孙 ...

  4. JAVA 递归实现从n个数中选取m个数的所有组合

    这周Java课程有个小作业:Java递归实现从n个数中选取m个数的所有组合 代码如下: //其中 n 取 1,2,3,4,5 五个数, m 取 3 package javaText; public c ...

  5. JAVA递归、非递归遍历二叉树(转)

    原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { priva ...

  6. 慎用Java递归调用

    总结:慎用Java递归调用,测试时可以尝试该方法,否则尽量不要使用递归!递归过多调用时,最好改为for或者whlie来代替. 在java语言中,使用递归调用时,如果过多的调用容易造成java.lang ...

  7. Java递归实现阶乘

    import java.util.Scanner; public class Factorial { public static void main(String[] args) { Scanner ...

  8. java递归删除目录下所有内容

    java递归删除目录下所有内容 private static boolean deleteDir(File dir) {if (dir.isDirectory()) {        String[] ...

  9. JAVA递归实现线索化二叉树

    JAVA递归实现线索化二叉树 基础理论 首先,二叉树递归遍历分为先序遍历.中序遍历和后序遍历. 先序遍历为:根节点+左子树+右子树 中序遍历为:左子树+根节点+右子树 后序遍历为:左子树+右子树+根节 ...

随机推荐

  1. 商品规格,自定义SKU类型

    <html> <head> <script type="text/javascript" src="http://xoxco.com/exa ...

  2. Convolutional Neural Network Architectures for Matching Natural Language Sentences

    interaction  n. 互动;一起活动;合作;互相影响 capture vt.俘获;夺取;夺得;引起(注意.想像.兴趣)n.捕获;占领;捕获物;[计算机]捕捉 hence  adv. 从此;因 ...

  3. 设计简单的VB程序

    1.模拟对话程序 [程序源码] Option Explicit Private Sub Command1_Click() Text2.Text = "" Text1.Text = ...

  4. 如何注册Tomcat到Window Service服务

    win+R打开运行窗口,输入cmd打开dos窗口,使用cd命令将位置切换到tomcat路径下的bin文件,本机是F盘下. 先输入F:回车进入F盘,然后输入命令cd F:\apache-tomcat-5 ...

  5. 增加删除的js

    <!doctype html><html lang="en"> <head>  <meta charset="UTF-8&quo ...

  6. jquery Ajax 实现图片上传的功能。

    $('#image').on('change', function () {         var url = "";         var form = new FormDa ...

  7. RabbitMQ全网资料收集

    RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准 ...

  8. 去除 chrome 上保存密码后的 input 框的屎黄色背景

    网上找的设置 background-color,background-image 没用,后来找到这个方法测试有效: input:-webkit-autofill { transition: backg ...

  9. python3 多线程爆破ftp、mysql、ssh

    当然 也支持ip 为 127.0.0.1-255 这样的 字典放到 dict 目录里 链接: https://pan.baidu.com/s/1htchOyN5hK9nmZlWfTiFzA 密码: v ...

  10. gcc and g++ 常用参数解释

    程序编译运行的过程 预处理.处理一些#include,#define命令,生成.i或者.ii文件: 编译.编译器进行语法分析,语义分析,中间代码生成,目标代码生成,优化,生成.s文件 汇编.汇编器把汇 ...