解题思路:回溯法
class Solution {
public:
void do_sum(vector<vector<int>>& result, int cur,int level, int target, vector<int>& candidates, vector<int>& tmp){
if (cur == target)
{
result.push_back(tmp);
return;
}
if (cur > target)return;
for (int i = level; i < candidates.size(); i++)
{
tmp.push_back(candidates[i]);
do_sum(result, cur + candidates[i],i, target, candidates, tmp);
tmp.pop_back();
}
return;
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> result;
vector<int> tmp;
do_sum(result, 0,0, target, candidates, tmp);
return result;
}
};

本文介绍了一种使用回溯法解决组合总和问题的方法。通过递归地选取候选数组中的元素,寻找所有可能的组合,使得这些组合的元素之和等于目标值。代码示例展示了如何实现这一算法。
1万+

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



