class Solution {
public:
vector<vector<int>> ans;
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
int n=candidates.size()-1;
function<void(vector<int>,int,int)> dfs=[&](vector<int> res,int index,int capcity){
if(capcity==0) ans.push_back(res);
else{
if(index>=0){
if(candidates[index]>capcity){
dfs(res,index-1,capcity);
}
else{
vector<int> new_res=res;
new_res.push_back(candidates[index]);
dfs(new_res,index,capcity-candidates[index]);
//dfs(new_res,index-1,capcity-candidates[index]);
dfs(res,index-1,capcity);
}
}
}
};
vector<int> res;
dfs(res,n,target);
return ans;
}
};
递归思想、注释行不用加,不然会和第一个dfs后的第二个dfs重复