
标准回溯法
class Solution {
private:
vector<vector<int>> res;
vector<int> row;
void combination(vector<int>& candidates, int target, int index){
//不符合条件,返回
if(target<0)
return;
//符合条件,将row加入res,返回
if(target==0){
res.push_back(row);
return;
}
else{
//从第index个数开始处理,候选解为index及以后的元素
for(int i=index;i<candidates.size();++i){
row.push_back(candidates[i]);
combination(candidates,target-candidates[i],i);
//回溯
row.pop_back();
}
}
}
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
res.clear();
row.clear();
if(candidates.empty())
return res;
combination(candidates,target,0);
return res;
}
};
本文深入探讨了标准回溯法的实现细节,通过一个具体的代码示例,详细讲解了如何使用回溯法解决组合求和问题。代码中定义了一个Solution类,其中包含一个名为combination的递归函数,用于寻找所有可能的数列组合,使得数列中数字的和等于目标值。
124

被折叠的 条评论
为什么被折叠?



