LeetCode每天刷day33:Combination Sum

版权声明:本文为博主原创文章,未经博主允许可以转载。(转呀转呀/笑哭),希望标注出处hhh https://blog.csdn.net/qq_36428171/article/details/89372151

题目:
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

说明:

  • 所有数字(包括 target)都是正整数。
  • 解集不能包含重复的组合。

题目链接:Combination Sum
C++:
index 可以保证结果不是重复的

class Solution {
public:
    vector<vector<int>> ret;
    void dfs(vector<int>& candidates, vector<int>& sub, int target, int index)
    {
        int sum = 0;
        for(int i=0;i<sub.size();i++)
            sum += sub[i];
        if(sum==target)
        {
            ret.push_back(sub);
            return;
        }
        else if(sum>target)
            return;
        else
        {
            for(int i=index;i<candidates.size();i++)
            {
                sub.push_back(candidates[i]);
                dfs(candidates, sub, target, i);
                sub.pop_back();
            }
        }
        return;
    }
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        int len = candidates.size();
        if(len == 0)
            return ret;      
        vector<int> sub;
        dfs(candidates, sub, target, 0);
        return ret;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_36428171/article/details/89372151