问题链接
题目解析
给一组数和一个目标值,求和为目标值的组合。数组中的每个数可以取多次。
解题思路
像这种结果要求返回所有符合要求解的题,十有八九都是要利用到递归,而且解题的思路都大同小异,可以发现这些题目发现都是一个套路,都是需要另写一个递归函数。
递归函数中加入三个变量,start记录当前的递归到的下标,answer为一个组合解,res保存所有已经得到的解,每次调用新的递归函数时,此时的target要减去当前数组的的数。
注意一点是需要先将原数组排序,可以避免重复。
参考代码
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector< vector<int> > res;
vector<int> answer;
sort(candidates.begin(), candidates.end());
solve(candidates, target, res, answer, 0);
return res;
}
void solve(vector<int>& candidates, int target, vector< vector<int> >& res, vector<int>& answer, int start) {
if(target < 0) return;
else if(target == 0) res.push_back(answer);
else {
for(int i = start; i < candidates.size(); i++) {
answer.push_back(candidates[i]);
solve(candidates, target-candidates[i], res, answer, i);
answer.pop_back();
}
}
}
};
相似题目
LeetCode 40. Combination Sum II
LeetCode All in One题解汇总(持续更新中...)
本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.