diff --git a/40. Combination Sum II b/40. Combination Sum II new file mode 100644 index 0000000..605f0b2 --- /dev/null +++ b/40. Combination Sum II @@ -0,0 +1,36 @@ +class Solution { +public: + vector> combinationSum2(vector& candidates, int target) { + sort(candidates.begin(), candidates.end()); + vector> res; + + vector comb; + dfs(candidates, target, 0, comb, res); + return res; + } + + void dfs(vector& candidates, int target, int start, vector& comb, vector>& res) { + if (target < 0) { + return; + } + + if (target == 0) { + res.push_back(comb); + return; + } + + for (int i = start; i < candidates.size(); i++) { + if (i > start && candidates[i] == candidates[i-1]) { + continue; + } + + if (candidates[i] > target) { + break; + } + + comb.push_back(candidates[i]); + dfs(candidates, target - candidates[i], i + 1, comb, res); + comb.pop_back(); + } + } +};