一、题目
二、思路
1、dfs+剪枝
2、一个数选和不选
三、代码
class Solution {
public:
vector<vector<int>>res;
vector<int>temp;
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
int size=candidates.size();
dfs(candidates,target,0,size,0);
return res;
}
void dfs(vector<int>& candidates, int &target,int sum,int &size,int cur){
if(sum==target){
res.emplace_back(temp);
return;
}
else if(sum>target || cur>=size){
return;
}
//选和不选
//遍历的时候已经是不选了,
for(int i=cur;i<size;++i){
//xuan
if(target-sum>=candidates[i]){
temp.emplace_back(candidates[i]);
//注意传入的参数i
dfs(candidates,target,sum+candidates[i],size,i);
temp.pop_back();
}
else{
break;
}
}
}
};