问题描述
给定一个数字 k
和数字 n
,要求找出 k
个数字的和为 n
的组合,其中组合中的数字为 1
到 9
,且不能出现重复。题目链接:**点我**
样例输入输出
输入:k = 3, n = 9
输出:[[1,2,6],[1,3,5],[2,3,4]]
输入:k = 4,n = 3
输出:[]
问题解法
此题比较简单,直接使用回溯算法进行求解即可。代码如下
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 33 34 35 36 37 38
| class Solution { public List<List<Integer>> combinationSum3(int k, int n) { List<List<Integer>> result = new ArrayList<>(); for (int i = 1; i <= 9; i++) { List<Integer> nums = new ArrayList<>(); nums.add(i); search(result, nums, i, k, n); } return result; }
private void search(List<List<Integer>> result, List<Integer> nums, int sum, int k, int n) { if (sum > n) { return; }
if (nums.size() == k) { if (sum == n) { result.add(new ArrayList<>(nums)); } return; }
for (int i = nums.get(nums.size() - 1) + 1; i <= 9; i++) { nums.add(i); search(result, nums, sum + i, k, n); nums.remove(nums.size() - 1); } } }
|