LeetCode 39. Combination Sum

问题链接

LeetCode 39. Combination Sum

题目解析

给一组数和一个目标值,求和为目标值的组合。数组中的每个数可以取多次。

解题思路

像这种结果要求返回所有符合要求解的题,十有八九都是要利用到递归,而且解题的思路都大同小异,可以发现这些题目发现都是一个套路,都是需要另写一个递归函数。

递归函数中加入三个变量,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和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


posted @ 2018-04-25 19:19  AlvinZH  阅读(458)  评论(0编辑  收藏  举报