字典顺序输出
// Collections.sort(array);即可解决
public static void main(String [] args) {
String s="ABCD";
System.out.println(Permutation(s));
}
public static ArrayList<String> Permutation(String str) {
ArrayList<String> array = new ArrayList<>();
char[] a = str.toCharArray();
solve(array,a,0,str.length());
array = new ArrayList<String>(new HashSet<String>(array));//去重
Collections.sort(array);
return array;
}
private static void solve(ArrayList<String> array, char[] a, int index, int length){
if(index ==length-1){
String res = change(a);
array.add(res);
}else{
for(int i =index;i<length;i++){
char temp = a[i];
a[i] =a[index];
a[index] =temp;
//当前index位置的字符已经通过交换找到了,那么就递归找下一个位置字符
solve(array, a, index+1, length);
//消除交换字符的影响,使之变为没交换之前的状态
temp = a[i];
a[i] =a[index];
a[index] =temp;
}
}
}
private static String change(char[] a) {
StringBuilder res = new StringBuilder();
for(char value : a){
res.append(value);
}
return res.toString();
}