diff --git a/problems/0040.组合总和II.md b/problems/0040.组合总和II.md index 9094020e..33e4a46f 100644 --- a/problems/0040.组合总和II.md +++ b/problems/0040.组合总和II.md @@ -41,13 +41,11 @@ candidates 中的每个数字在每个组合中只能使用一次。 ] ``` -# 算法公开课 +## 算法公开课 -**《代码随想录》算法视频公开课:[回溯算法中的去重,树层去重树枝去重,你弄清楚了没?| LeetCode:40.组合总和II](https://www.bilibili.com/video/BV12V4y1V73A),相信结合视频再看本篇题解,更有助于大家对本题的理解**。 +**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[回溯算法中的去重,树层去重树枝去重,你弄清楚了没?| LeetCode:40.组合总和II](https://www.bilibili.com/video/BV12V4y1V73A),相信结合视频再看本篇题解,更有助于大家对本题的理解**。 - - -# 思路 +## 思路 这道题目和[39.组合总和](https://programmercarl.com/0039.组合总和.html)如下区别: @@ -86,7 +84,7 @@ candidates 中的每个数字在每个组合中只能使用一次。 可以看到图中,每个节点相对于 [39.组合总和](https://mp.weixin.qq.com/s/FLg8G6EjVcxBjwCbzpACPw)我多加了used数组,这个used数组下面会重点介绍。 -## 回溯三部曲 +### 回溯三部曲 * **递归函数参数** @@ -217,7 +215,7 @@ public: * 时间复杂度: O(n * 2^n) * 空间复杂度: O(n) -## 补充 +### 补充 这里直接用startIndex来去重也是可以的, 就不用used数组了。 @@ -257,7 +255,7 @@ public: ``` -# 总结 +## 总结 本题同样是求组合总和,但就是因为其数组candidates有重复元素,而要求不能有重复的组合,所以相对于[39.组合总和](https://programmercarl.com/0039.组合总和.html)难度提升了不少。 @@ -265,14 +263,10 @@ public: 所以Carl有必要把去重的这块彻彻底底的给大家讲清楚,**就连“树层去重”和“树枝去重”都是我自创的词汇,希望对大家理解有帮助!** +## 其他语言版本 - - -# 其他语言版本 - - -## Java +### Java **使用标记数组** ```Java class Solution { @@ -355,7 +349,7 @@ class Solution { } ``` -## Python +### Python 回溯 ```python class Solution: @@ -442,7 +436,7 @@ class Solution: self.combinationSumHelper(candidates, target - candidates[i], i + 1, path, results) path.pop() ``` -## Go +### Go 主要在于如何在回溯中去重 **使用used数组** @@ -518,7 +512,7 @@ func dfs(candidates []int, start int, target int) { } } ``` -## javaScript +### JavaScript ```js /** @@ -588,7 +582,7 @@ var combinationSum2 = function(candidates, target) { }; ``` -## TypeScript +### TypeScript ```typescript function combinationSum2(candidates: number[], target: number): number[][] { @@ -619,7 +613,7 @@ function combinationSum2(candidates: number[], target: number): number[][] { }; ``` -## Rust +### Rust ```Rust impl Solution { @@ -654,7 +648,7 @@ impl Solution { } ``` -## C +### C ```c int* path; @@ -716,7 +710,7 @@ int** combinationSum2(int* candidates, int candidatesSize, int target, int* retu } ``` -## Swift +### Swift ```swift func combinationSum2(_ candidates: [Int], _ target: Int) -> [[Int]] { @@ -749,7 +743,7 @@ func combinationSum2(_ candidates: [Int], _ target: Int) -> [[Int]] { ``` -## Scala +### Scala ```scala object Solution { @@ -784,3 +778,4 @@ object Solution { +