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