问题:
Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
代码:void getCombineSum(
int &sum,
int level,
int target,
vector<int> &solution,
vector<int> &candidates,
vector<vector<int>> &result
){
if(sum > target) return;
if(sum == target){
result.push_back(solution);
return;
}
for(int i = level; i<candidates.size(); i++){
sum += candidates[i];
solution.push_back(candidates[i]);
getCombineSum(sum,<span style="color:#ff6666;">i</span>,target,solution,candidates,result);
solution.pop_back();
sum -= candidates[i];
}
}
vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
vector<int> solution;
vector<vector<int>> result;
int sum = 0;
sort(candidates.begin(),candidates.end());
getCombineSum(sum,0,target,solution,candidates,result);
return result;
}
base case: solution中元素之和sum为target
if sum值大于target 直接返回,并弹出最后元素
else 从candidate numbers 中继续选出元素加到solution中,同时用sum记录当前和值