标签:
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 }
标签:
原文地址:http://www.cnblogs.com/eleven24/p/4236259.html