深い検索leetcodeの組み合わせ合計

そして、kの数nの組み合わせを見つけるために、すべての合計。組成物は、1-- 9の正の整数を含んでいてもよい、及び反復数は、各組合せには存在しません。

説明:

すべての数値は正の整数です。
ソリューションセットは、重複の組み合わせを含めることはできません。 
例1:

入力:K = 3、N = 7
出力:[[2,4]]
例2:

入力:K = 3、N = 9
出力:[[1,2,6]、[1,3,5]、[2,3,4]

出典:滞在ボタン(LeetCode)
リンク:https://leetcode-cn.com/problems/combination-sum-iii

アイデア:分析、いくつかのパラメータのDFS和必ずしも必要数、数、列挙関数内の最初の数字は、再帰的に第2の数の列挙の数kまで、回答を満たす条件が追加された場合、以降のタイムライン上の配列の列挙は、列挙順序を決定するので、そこに繰り返すことができない、これは1 + 2 + 4,4 + 1 + 2が存在して回避されるので、開始点列挙するためにパラメータを渡す必要があります。

class Solution {
public:
    vector<vector<int>> ans;
    vector<int> path;
    vector<vector<int>> combinationSum3(int k, int n) {
        dfs(k,n,1);
        return ans;
    }
    void dfs(int k,int n,int start)
    {
        if(!k){
            if(!n)ans.push_back(path);
            return;
        }
//k个数,需要剩下的数有K个数,9-i+1>=k,则i<=10-k
        for(int i=start;i<=10-k;++i){
            if(n>=i){//只有n>=i的时候才能加进去
                path.push_back(i);
                dfs(k-1,n-i,i+1);
                path.pop_back();
            }
        }
    }
};

おすすめ

転載: www.cnblogs.com/clear-love/p/11363291.html