そして、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();
}
}
}
};