/*
* 全排列核心操作就是交换与递归:
* 1、交换:交换遍历到的两个数,使第一次选出不同的数。
* 2、递归进入下一层排列下一层,结束条件是方法的index指针等于arr.length-1时打印排列好的数组,结束递归
* 3、再次交换第一步交换的两个数,还原数组状态。(回溯法)
*/
package 全排列;
public class Demo {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 6, 4, 10, 8 };
dfs(arr, 0);
}
public static void swap(int[] arr, int index1, int index2) {
int temp = 0;
temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
}
public static void dfs(int[] arr, int index) {
/*退出递归的条件*/
if (index == arr.length - 1) {
for (int a : arr) {
System.out.print(a + "\t");
}
System.out.println();
} else {
/*核心代码,交换与递归*/
for (int i = index; i < arr.length; i++) {
swap(arr, index, i);
dfs(arr, index + 1);
swap(arr, index, i);
}
}
}
}