LeetCode 39. Combination Sum

问题连接

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和博客园全部,欢迎转载和商用,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利.递归

相关文章
相关标签/搜索