题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
思路
从字符串数组中每次选取一个元素,作为结果中的第一个元素。然后,对剩余的元素全排列,步骤跟上面一样。很明显这是个递归处理的过程,一直到最后即可。
public static ArrayList<String> Permutation(String str) {
ArrayList<String> result = new ArrayList<String>();
if(str==null||str.length()==0)
return result;
char[] c = str.toCharArray();
Permutation(result, c, 0, c.length);
Collections.sort(result);
return result;
}
public static void Permutation(ArrayList<String> list,char[] c, int star,int end){
if(star==end-1){
String result = new String(c);
if(!list.contains(result))
list.add(result);
return;
}
//交換
for(int i = star;i<end;i++){
if(i!=star&&c[star]==c[i])
continue;
char temp = c[star];
char temp2 = c[i];
c[star] = temp2;
c[i] = temp;
Permutation(list,c,star+1,end);
c[star] = temp;
c[i] = temp2;
}
}