39.组合总分

在这里插入图片描述

数字可以重复选,如 上面的示例二,我们先把以2开头的全部选完,在选以3开头的。
这样保证了结果中没有重复的(如2,3,3和 3,2,3)
参数k来控制选数的时候只能从本身或者下一个数选。

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

看了题解,也可以是减法。

发布了161 篇原创文章 · 获赞 68 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43179428/article/details/105091100
今日推荐