leetcode 39.组合总和【回溯法一次通过】

执行用时 : 68 ms, 在Combination Sum的C++提交中击败了31.33% 的用户

内存消耗 : 17.7 MB, 在Combination Sum的C++提交中击败了28.48% 的用户

class Solution {
public:
    vector> ans;
    vector> combinationSum(vector& candidates, int target) {
        //又是dfs 回溯
        //已知都是正数
        dfs(candidates,target,{},0);
        return ans;
    }
    void dfs(vector& c, int t, vector k,int now)
    {
        if(t==0) 
        {
            ans.push_back(k);
            return;
        }
        if(t<0) return;
        for(int i=now;i

 

加上剪枝:【如果小于0就没必要继续了】

        for(int i=now;i

 结果还行:

执行用时 : 24 ms, 在Combination Sum的C++提交中击败了87.09% 的用户

内存消耗 : 11.3 MB, 在Combination Sum的C++提交中击败了56.49% 的用户

 

再改为引用调用

class Solution {
public:
    vector> ans;
    vector> combinationSum(vector& candidates, int target) {
        //又是dfs 回溯
        //已知都是正数
        vector a;
        dfs(candidates,target,a,0);
        return ans;
    }
    void dfs(vector& c, int t, vector &k,int now)
    {
        if(t==0) 
        {
            ans.push_back(k);
            return;
        }
        if(t<0) return;
        for(int i=now;i

执行用时 : 20 ms, 在Combination Sum的C++提交中击败了95.67% 的用户

内存消耗 : 9.7 MB, 在Combination Sum的C++提交中击败了86.08% 的用户

 

还行、

你可能感兴趣的:(leetcode,中等难度)