0%

leetCode-216:Combination Sum III

问题描述

给定一个数字 k 和数字 n,要求找出 k 个数字的和为 n 的组合,其中组合中的数字为 19,且不能出现重复。题目链接:**点我**

样例输入输出

输入: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);
}
}
}