LeetCode 排列,组合,子集问题相关算法题专项整理
78. 子集
回溯法套路。
1 | |
另一种思路是和递归思路比较像,很巧妙。也可以说是动态规划。
1 | |
77. 组合
依然是回溯。只不过,根据条件剪去了一些情况。
1 | |
46. 全排列
使用回溯,这里使用了备忘录,即 self.used,用来记录是否使用过某一个元素。所以我们在回溯之后要恢复两个东西,一个是备忘录,另一个是 curRes。
1 | |
另一种,递归,有一点巧妙:
1 | |
90. 子集 II
调试花了一点时间。因为一开始 backtrack(i + 1, nums) 里面的 i 搞成了 start。
1 | |
40. 组合总和 II
使用回溯方法解决:
1 | |
之前使用 dfs 解决,其实也是回溯:
1 | |
47. 全排列 II
回溯加上剪枝。这里的剪枝有一定的技巧性。
对于剪枝的判断:重复元素,前面的元素一定要在当前元素之前使用。
还有,一定要先给数组排序!
1 | |
39. 组合总和
回溯的时候,start 变了。
1 | |
之前的做法,类似:
1 | |
216. 组合总和 III
依然是回溯加上简单的剪枝。
1 | |
LeetCode 排列,组合,子集问题相关算法题专项整理
http://fanlumaster.github.io/2022/03/13/LeetCode-排列,组合,子集问题相关算法题专项整理/