leetcode算法题:数组全排列 java&python解法
题目概述
解题思路
DFS深度优先遍历
思路:
- DFS递归回溯算法,通过循环递归的方式对每个位置进行填数(交换),不断的往上回溯。
- 若原数组为[1,2,3,4]
- 第一次的回溯结果一定是原数组 每个位置的填充值正好为当前索引值
- 第二次回溯会回到倒数第二层递归,所以最后两个数字3,4进行交换,结果为[1,2,4,3],for循环结束,进行回溯
- 第三次回溯会回到倒数第三层递归,会将2,3两个数字交换,结果为[1,3,2,4] 到此 for循环没有结束,会继续递归 将[1,3,2,4]中的2,4交换,拿到[1,3,4,2] 然后for循环结束会回到第二层递归。
- 依次类推,等到回溯到第一次递归,可以理解为"1"开头的所有排列已经结束。for循环会继续,再次不断的递归回溯。
递归回溯 java代码
//初始化数据
public static ArrayList<int[]> all_swap(int[] src){
//定义结果数组
ArrayList<int[]> result = new ArrayList<int