Skip to content

Commit 0304f23

Browse files
Add files via upload
1 parent 7581d4d commit 0304f23

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// 典型的回溯法
2+
// Runtime: 8 ms, faster than 86.52% of C++ online submissions for Combination Sum II.
3+
// Memory Usage: 8.8 MB, less than 94.33% of C++ online submissions for Combination Sum II.
4+
5+
class Solution
6+
{
7+
public:
8+
vector<vector<int>> combinationSum2(vector<int>& candidates, int target)
9+
{
10+
// 边界条件处理
11+
sort(candidates.begin(), candidates.end());
12+
if (candidates.size() == 0 || candidates[0] > target)
13+
return vector<vector<int>>();
14+
15+
vector<vector<int>> res;
16+
vector<int> temp;
17+
18+
helper(res, candidates, temp, target, 0, 0);
19+
return res;
20+
}
21+
22+
private:
23+
void helper(vector<vector<int>>& res, vector<int>& candidates, vector<int>& temp, int target, int curSum, int start)
24+
{
25+
if (curSum == target)
26+
{
27+
res.push_back(temp);
28+
return ;
29+
}
30+
31+
for (int i = start; i < candidates.size(); ++i)
32+
{
33+
if (curSum + candidates[i] > target)
34+
break;
35+
if (i > start && candidates[i] == candidates[i - 1])
36+
continue;
37+
38+
curSum += candidates[i];
39+
temp.push_back(candidates[i]);
40+
41+
helper(res, candidates, temp, target, curSum, i + 1);
42+
43+
curSum -= candidates[i];
44+
temp.pop_back();
45+
}
46+
}
47+
};

0 commit comments

Comments
 (0)