216. 合算和Ⅲ
合計すると n になる k 個の数値のすべての組み合わせを見つけます。組み合わせには 1 ~ 9 の正の整数のみが使用でき、各組み合わせで数字を繰り返すことはできません。
説明:
すべての数値は正の整数です。
ソリューション セットには重複した組み合わせを含めることはできません。
class Solution {
// 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
// 内存消耗:37 MB, 在所有 Java 提交中击败了79.23%的用户
//回溯法
public List<List<Integer>> combinationSum3(int k, int n) {
Deque<Integer> dp = new ArrayDeque<>();
List<List<Integer>> res = new ArrayList<>();
dfs(k, n, 1, dp, res);
return res;
}
public void dfs(int k, int n, int tar, Deque<Integer> dp, List<List<Integer>> res) {
if(k == 0 && n ==0){
res.add(new ArrayList<>(dp));
return;
}
if(k == 0 || n <= 0){
return;
}
if(tar > 9){
return;
}
//不要当前项
dfs(k, n, tar + 1, dp, res);
//要当前项
dp.addLast(tar);
dfs(k - 1, n - tar, tar + 1, dp, res);
dp.removeLast();
return;
}
}