二刷hot100-46.全排列
回溯算法;事先定义好两个list;一个作为结果,一个作为递归过程中的某一结果path;
终止条件:当path的长度等于数组长度,可以收割结果将其放入res当中;
然后遍历,遍历长度与数组长度一致;
如果used数组对应下标的元素使用过,continue
未使用过,则赋值为1,将当前值推入path,进行递归;
递归回来后,进行回溯操作,先在path里减去当前元素,再used对应下标元素赋值为0
class Solution { List<List<Integer>> res = new ArrayList<>(); List<Integer> path = new ArrayList<>(); public List<List<Integer>> permute(int[] nums) { int[] used = new int[nums.length]; f(nums,used); return res; } public void f(int[] nums,int[] used){ if(path.size() == nums.length){ res.add(new ArrayList<>(path)); return; } for(int i = 0;i < nums.length;i++){ if(used[i] == 1){ continue; } used[i] = 1; path.add(nums[i]); f(nums,used); path.remove(path.size() - 1); used[i] = 0; } } }