自己最初的代码
class Solution {
private:
void dfs(vector<vector<int>>&res,vector<int>& candidates, int target,int sum,vector<int>temp){
if(sum>target)return;
if(sum==target){
res.push_back(temp);
return;
}
for(int i=0;i<candidates.size();i++){
temp.push_back(candidates[i]);
sum+=candidates[i];
dfs(res,candidates,target,sum,temp);
temp.pop_back();
sum-=candidates[i];
}
}
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>>res;
vector<int>temp;
dfs(res,candidates,target,0,temp);
return res;
}
};
结果有重复的,想了一会儿也不知道怎么优化。。
这是看了题解之后优化的代码
class Solution {
private:
void dfs(vector<vector<int>>&res,vector<int>& candidates, int target,int cur,vector<int>temp){
if(cur==candidates.size()){
return;
}
if(target==0){
res.push_back(temp);
return;
}
dfs(res,candidates,target,cur+1,temp);
if(target-candidates[cur]>=0){
temp.push_back(candidates[cur]);
dfs(res,candidates,target-candidates[cur],cur,temp);
temp.pop_back();
}
}
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>>res;
vector<int>temp;
dfs(res,candidates,target,0,temp);
return res;
}
};