做题博客链接
https://blog.csdn.net/qq_43349112/article/details/108542248
题目链接
https://leetcode-cn.com/problems/combination-sum-iii/
描述
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明:
所有数字都是正整数。
解集不能包含重复的组合。
示例
示例 1:
输入: k = 3, n = 7
输出: [[1,2,4]]
示例 2:
输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]
初始代码模板
class Solution {
public List<List<Integer>> combinationSum3(int k, int n) {
}
}
代码
做的时候可以把“组合总和” 和“组合总和II”回顾一下,思路是一样的,甚至更为简单。
class Solution {
List<List<Integer>> res;
LinkedList<Integer> tmp;
public List<List<Integer>> combinationSum3(int k, int n) {
res = new ArrayList<>();
tmp = new LinkedList<>();
if (n > 0 && n <= 55) dfs(k, n, 0);
return res;
}
//因为不能有重复的组合,所以当前选定的数字,不可以比上一次的小
private void dfs(int n, int tar, int prev) {
if (n == 0 && tar == 0) {
//System.out.println(list + " " + n + " " + tar);
res.add(new ArrayList<>(tmp));
return;
}
//如果已经没有可选次数,或者超过总和
if (n < 1 || tar < prev) {
return;
}
//System.out.println(n);
for (int i = prev + 1; i <= 9; i++) {
tmp.add(i);
dfs(n - 1, tar - i, i);
tmp.removeLast();
}
}
}