すべての可能な組み合わせを見つける 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;
}
};