博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全排列
阅读量:5248 次
发布时间:2019-06-14

本文共 1170 字,大约阅读时间需要 3 分钟。

使用递归思想解决排列问题。

假设对ABCD四个字母进行全排列,基本思想是:

首先,分别把A,B,C,D四个字母放在第一位,然后对剩下的三个字母进行全排列。

第二步,分别对剩下的三位中的每一位放在第一位,对剩下的两个字母进行全排列,也就是和第一步相同的操作,这便形成了递归。

最后,当出口条件达成,打印这个数组,便是一次全排列,所有递归进行完毕后,就打印出了所有的排列可能。

代码:

1 public static void f(char[] a,int k){ 2         if(k >= a.length - 1){ 3             for(int i = 0; i < a.length; i++){ 4                 System.out.print(a[i]); 5             } 6             System.out.println(); 7         } 8         /**************** 9          * k代表着第几次递归,同时也是当前的位数,10          * 比如k为0的时候代表着从第0位开始进行全排列,步骤是:11          * 1.交换第0位和第1位,12          * 2.调用k+1的递归13          * 3.将第0位和第1位交换回来,此时数组和最开始相同14          * 4.继续交换第0位和第2位,15          * 5.调用k+1递归16          * 6.将第0位和第2位交换回来,此时数组还是和最开始相同17          * 7.继续将剩下的位数都交换到第0位,进行递归调用18          */19         for(int i = k; i < a.length; i++){20             {
char t = a[k]; a[k] = a[i]; a[i] = t;}//1 421 f(a,k+1);//2 522 {
char t = a[k]; a[k] = a[i]; a[i] = t;}//3 623 }24 }25 26 public static void main(String[] args) {27 char[] a = "ABCD".toCharArray();28 f(a,0);29 }

结果就是全排列了,太长就不放上来了。

转载于:https://www.cnblogs.com/macher/p/5215305.html

你可能感兴趣的文章
帧的最小长度 CSMA/CD
查看>>
xib文件加载后设置frame无效问题
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>
httpd_Vhosts文件的配置
查看>>
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
电子眼抓拍大解密
查看>>
poj 1331 Multiply
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
P1107 最大整数
查看>>
多进程与多线程的区别
查看>>
Ubuntu(虚拟机)下安装Qt5.5.1
查看>>