0%

39. Combination Sum

39. Combination Sum

backTrack

摘自wiki: 回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现,现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> ret;
vector<int> temp;
backTrack(ret, candidates, temp, target, 0);
return ret;
}
private:
void backTrack(vector<vector<int>>& ret, vector<int>& candidates, vector<int>& temp, int remain, int start)
{
if(remain < 0)
return;
if(remain == 0)
{
ret.push_back(temp);
return;
}
for(size_t i = start; i < candidates.size(); ++i)
{
temp.push_back(candidates[i]);
backTrack(ret, candidates, temp, remain - candidates[i], i);
temp.pop_back();
}
}
};