全排列算法

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 }

 

你可能感兴趣的:(全排列)