【leetcode】【中】216。コンビネーション合計III

216コンビネーション合計III

すべての可能な組み合わせを見つける  k個の  番号に加算数  nは 1から9までの数字のみを使用することができ、それぞれの組み合わせは、数字の一意のセットであるべきであることを考えると、。

注意:

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

例1:

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

例2:

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

トピックリンク:https://leetcode-cn.com/problems/combination-sum-iii/

 

思考

アクトワン:後戻り

タイトルバックトラックや他の同様の慣行は、結果を受け継が。

プルーニング:それは組み合わせであり、各数は一度だけ使用することができますので数字は最後の撮影した後、その後、次の層の反復が開始されます。

終了条件K == 0(K == 1であってもよいです)。

ピット:範囲[1,9]内の数字の組み合わせ。

class Solution {
public:
    vector<vector<int>> res;
    vector<vector<int>> combinationSum3(int k, int n) {
        if(k<=0 || n<=0 || n<k) return res;
        vector<int> cur;
        trace(k, n, 0, cur);
        return res;
    }
    void trace(int k, int n, int last, vector<int> &cur){
        if(k==0){
            if(n==0) res.push_back(cur);
            return;
        }
        for(int i = last+1; i<=9; ++i){
            if(i>n) break;
            cur.push_back(i);
            trace(k-1, n-i, i, cur);
            cur.pop_back();
        }
        return;
    }
};

 

发布了125 篇原创文章 · 获赞 2 · 访问量 3677

おすすめ

転載: blog.csdn.net/lemonade13/article/details/104534216