题解
输入:
candidates [2,3,6,7]
target 7
输出:
[[2,2,3],[7]]
class Solution {
public:
void dfs(vector<vector<int>>& res, vector<int> candidates, vector<int> combine, int target, int idx) //idx 指向当前数
{
if (idx == candidates.size()) //当前数超过candidate容量
return; //回溯
if (target == 0) //找到满足target的组合
{
res.push_back(combine);
return;
}
dfs(res, candidates, combine, target, idx + 1); //跳过当前数
//选择当前数
if (target - candidates[idx] >= 0)
{
combine.push_back(candidates[idx]);
dfs(res, candidates, combine, target - candidates[idx], idx); //不满足target则跳过当前数
combine.pop_back(); //回溯
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target)
{
vector<vector<int>> res;
vector<int> combine;
dfs(res, candidates, combine, target, 0);
return res;
}
};
仅个人学习留存,侵私删!