分成两步,第一步得到第一个位置上可能的所有元素,即将第一个位置上的数与后面各个位置上的数进行交换;第二步,除了首个位置以外的所有数进行排列(递归),即将后面的字符中的第一个与后面的数进行交换。
code:
public static void printAllPerm(char[] cha, int left, int end) {
if(cha == null || cha.length <= 0) {
return;
}
if(left == end) {
for(int i = 0; i <= end; i++) {
System.out.print(cha[i]);
}
System.out.println();
}
for(int i = left; i <= end; i++) {
swap(cha,left,i);
printAllPerm(cha,left+1,end);
swap(cha,left,i);
}
}
public static void swap(char[] a, int i, int j) {
char temp = a[i];
a[i] = a[j];
a[j] = temp;
}