思路:
- Ann=Cn1*Cn-1…用第一位与后边依次交换相当于Cn1,递归调用
-
开始位 第一位交换 第二位交换 st=0 i=0 00交换 ->st`=1 i=1 11交换 ->st``=2 打印原数组 i=2 12交换 ->st``=2 打印第二位交换后 i=1 01交换 ->st`=1 i=1 11交换 ->st``=2 打印第一位交换后的数组 i=2 12交换 ->st``=2 打印第一位交换后基础上,第二位交换数组 i=2 02交换 ->st`=1 i=1 11交换 ->st``=2 打印第一位和第三位交换后数组 i=2 12交换 ->st``=2 打印第一位和第三位交换基础上,第二位交换数组
public static void arrange(String[] str, int st, int len) {
if (st == len - 1) {
for (int i = 0; i < len; i++) {
System.out.print(str[i] + " ");
}
System.out.println();
total++;
} else {
//Ann=Cn1*Cn-1....用第一位与后边依次交换相当于Cn1,递归调用
for (int i = st; i < len; i++) {
swap(str, st, i);
arrange(str, st + 1, len);
swap(str, st, i);
}
}
}