class Solution {
public:
vector<vector<int>>res;
vector<int>tmp;
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
dfs(candidates,target,0);
return res;
}
void dfs(vector<int>&candidates,int target,int cur){
if(target==0){
res.emplace_back(tmp);
return;
}
if(target<0||cur>=candidates.size()) return; //判断还能不能继续
tmp.emplace_back(candidates[cur]);
dfs(candidates,target-candidates[cur],cur);
tmp.pop_back();
dfs(candidates,target,cur+1);
}
};
更标准的写法
class Solution {
public:
vector<int>temp;
vector<vector<int>>res;
void dfs(vector<int>candidates,int target, int tempSum, int startIndex){
if(tempSum==target){
res.push_back(temp);
return;
}
for(int i=startIndex;i<candidates.size() && tempSum+candidates[i]<=target;++i){
temp.push_back(candidates[i]);
dfs(candidates,target,tempSum+candidates[i],i);
temp.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
dfs(candidates,target,0,0);
return res;
}
};