找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明:
示例 1:
1 2
| 输入: k = 3, n = 7 输出: [[1,2,4]]
|
示例 2:
1 2
| 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]
|
需要注意的是,不能包含重复的数字,不能包含重复的组合。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class Solution { List<List<Integer>> ans = new ArrayList<List<Integer>>();
public List<List<Integer>> combinationSum3(int k, int n) { dfs(n, k, 1, new ArrayDeque<Integer>()); return ans; }
public void dfs(int n, int k, int min, Deque<Integer> path){ if(n == 0 && k == 0){ ans.add(new ArrayList<Integer>(path)); return; } for(int i = min; k > 0 && i <= 9; i++){ if(i > n){ break; } path.addLast(i); dfs(n - i, k - 1, i + 1, path); path.removeLast(); } } }
|