首页 > 代码库 > 全排列算法

全排列算法

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 }

 

全排列算法