全排列算法

1、递归实现全排列

基本思路:

(1)、对于n个数的全排列,可以看成是其中1个数开始,另外(n-1)个数的全排列结尾的排列,如此循环,直至完成每一个数开始的全排列。

(2)、对于第一步得出的排列,将第1位忽略,剩下字串s,s的第一位作为开始,剩下的数进行全排列,循环,直至完成每一个数开始的全排列。

 1 public class Permutation {
 2     
 3     //将字符数组第a个字符和第b个字符交换位置
 4     public static String swap(String str,int a,int b){
 5         char array[] = str.toCharArray();
 6         char temp = array[a];
 7         array[a] = array[b];
 8         array[b] = temp;
 9         
10         str = new String(array);
11         return str;
12     }
13     
14     public static void perm(String str,int current,int length){ //第current个字符开始,每个字符与其后面的字符交换位置。
15         if(current == length){
16             System.out.println(str);
17         }
18         else{
19             for(int i = current; i <= length; i++){   //从current开始是因为,要输出初始字符串
20                 str = swap(str,current,i);               
21                 perm(str,current+1,length);      //从current的下一个字符开始,str是第current个字符与第i个字符交换后的str,每个字符与其后面的字符交换位置
22                 str = swap(str, current, i);
23             }
24         }
25     }
26         
27     public static void main(String[] args) {
28         String str = new String("123");
29         perm(str,0,str.length()-1);
30     }
31 }
原文地址:https://www.cnblogs.com/eleven24/p/4236259.html