思路:组合是无序的,于是在树形构造时,也就是在递归的时候,不用i+1,只需要从i自己再进行构造即可,具体树形结构如下(卡哥版):
c++题解:
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void traversal(vector<int>& candidates, int target, int sum, int startIndex)
{
if(sum>target)
return;
if(sum==target)
result.push_back(path);
for(int i=startIndex;i<candidates.size();i++)
{
sum+=candidates[i];
path.push_back(candidates[i]);
traversal(candidates,target,sum,i);
sum-=candidates[i];
path.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
traversal(candidates,target,0,0);
return result;
}
};