p77

LeetCode p77 Combinations 题解

1.题目:

Given two integers n and k, return all possible combinations of k numbers out of 1 … n.
For example,
If n = 4 and k = 2, a solution is:

[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]

题意:

从n个数中选出k个数,顺序排列输出所有的组合。

2.解题思路:

见代码,类似搜索,去掉多余的分支。

3.代码


[title] [] [url] [link text]
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
 
public class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> ansList = new ArrayList<List<Integer>>();
List<Integer> list = new ArrayList<Integer>();
helper(n, k, ansList, 1, list);
return ansList;
}

public void helper(int n, int k, List<List<Integer>> ansList, int a,
List<Integer> list) {

if (k == list.size()) {
List<Integer> cIntegers = new ArrayList<Integer>(list);
ansList.add(cIntegers);
//System.out.println(Arrays.toString(cIntegers.toArray()));
// list.remove(list.size() - 1);
return;
}
for (int i = a; i <= n; i++) {
if (list.size() + n - i + 1 < k) {
break;
}
list.add(i);
helper(n, k, ansList, i + 1, list);
list.remove(list.size() - 1);
}
}
}


4.一些总结: