0%

leetCode-77:Combinations

问题描述

给出数字 n 和数字 k,要求在数字1…n中找出 k 个数字的组合。题目链接:**点我**

样例输入输出

输入:n = 4, k = 2

输出:[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]

问题解法

此题主要使用回溯算法进行求解。需要用 k 轮迭代来获取 k 个数字的值,在每轮迭代中,依次遍历数字 in (第一轮:遍历1n,第二轮遍历2n,第三轮遍历3n,…),对每个数字加进列表中,如果列表中的个数刚好是k,则将这个列表放如结果集中。代码如下

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
class Solution 
{
public void helper(int n, int k, int start, List<Integer> items, List<List<Integer>> result)
{
if (items.size() == k)
{
List<Integer> tempItems = new ArrayList<>(items);
result.add(tempItems);
return;
}

for (int i = start; i <= n; i++)
{
items.add(i);
helper(n, k, i + 1, items, result);
items.remove(items.size() - 1);
}
}

public List<List<Integer>> combine(int n, int k)
{
List<List<Integer>> result = new ArrayList<>();
if (n < k)
{
return result;
}

helper(n, k, 1, new ArrayList<>(), result);
return result;
}
}