原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvqup5/
解法一:
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
backStrack(list,new ArrayList<>(),nums);
return list;
}
private void backStrack(List<List<Integer>> list,List<Integer> tmpList,int[] nums) {
if (tmpList.size() == nums.length) {
list.add(new ArrayList<>(tmpList));
return;
}
for (int i = 0 ; i < nums.length ; i++) {
if (tmpList.contains(nums[i])) {
continue;
}
tmpList.add(nums[i]);
backStrack(list,tmpList,nums);
tmpList.remove(tmpList.size() - 1);
}
}
}
思路:回溯法
如图
如上两张图就能够清晰的解释,回溯法的算法思路。
2025-04-13 start:
void backtracking(参数) {
if (终止条件) {
存放结果;
return;
}
for (选择 : 本层集合中的元素) {
处理节点;
backtracking(路径, 选择列表); // 递归
撤销处理; // 回溯
}
}
end