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-排列,组合,子集问题相关算法题专项整理/