题解
求目标解的组合数,dfs很容易解出。
对于每一个数,都有两种办法 选择 或者不选择来选择下一个,选择的话在是否继续选择还是不选择选择下一个。
官方题解写的很清楚官方题解
代码
class Solution {
public:
void dfs(vector<int>&candidates,int target,vector<vector<int>>&ans,vector<int>& combine,int idx){
//没有数组直接返回为0
if(idx == candidates.size()){
return;
}
if(target == 0){
ans.emplace_back(combine);
return;//找到一个解,存入结果之中
}
//直接逃过
dfs(candidates,target,ans,combine,idx + 1);
//选择当前的数
if(target - candidates[idx] >= 0){
combine.emplace_back(candidates[idx]);
dfs(candidates,target - candidates[idx],ans,combine,idx);
combine.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
int n = candidates.size();
vector<vector<int>>ans;
vector<int>combine;
dfs(candidates,target,ans,combine,0);
return ans;
}
};