转载自:https://www.cnblogs.com/zyoung/p/6764371.html
原文写的超级好
public class Demo {
public void Perm(int list[], int k, int m) {
if (k == m) {
for (int i = 0; i <= m; i++)
System.out.print(list[i]); //递归到最深处就把这个数组输出一下,
System.out.println();
} else {
for (int i = k; i <= m; i++) {
// 从固定的数后第一个依次交换
Swap(list, k, i);
Perm(list, k + 1, m);
// 这组递归完成之后需要交换回来,用这种来回更换原数组的方式能减少Likelist的使用,更方便
Swap(list, k, i);
}
}
}
public void Swap(int[] list, int i, int j) {
int t = list[i];
list[i] = list[j];
list[j] = t;
}
public static void main(String[] args) {
Demo d = new Demo();
int[] arr = {1,2,3,4};
d.Perm(arr, 0, 3);
}
}