递归的从大到小尝试
返回条件:总和≥target(若等于则为答案之一)
C++代码
class Solution {
public:
vector<vector<int>> result;
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end());
combinate(candidates, candidates.size() - 1, {}, target);
return result;
}
void combinate(vector<int>& candidates,int pos,vector<int>contain,int target)
{
if (target == 0)
result.push_back(contain);
if (target < 0)
return;
for (int i = 0; i <= pos; i++)
{
contain.push_back(candidates[i]);
combinate(candidates, i, contain, target - candidates[i]);
contain.pop_back();
}
}
};