LeetCode 39. Combination Sumhtml
给一组数和一个目标值,求和为目标值的组合。数组中的每一个数能够取屡次。数组
像这种结果要求返回全部符合要求解的题,十有八九都是要利用到递归,并且解题的思路都大同小异,能够发现这些题目发现都是一个套路,都是须要另写一个递归函数。函数
递归函数中加入三个变量,start记录当前的递归到的下标,answer为一个组合解,res保存全部已经获得的解,每次调用新的递归函数时,此时的target要减去当前数组的的数。code
注意一点是须要先将原数组排序,能够避免重复。htm
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 IIblog
LeetCode All in One题解汇总(持续更新中...)排序
本文版权归做者AlvinZH和博客园全部,欢迎转载和商用,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利.递归