题目描述
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], ]求对于字符数组1....n的长度为k的所有组合
解题思路
在前文——[剑指offer]求字符数组的所有组合中我们已经给出了更为一般的解法,现在只需稍微变形即可。具体看源码。
代码
public List<List<Integer>> combine(int n, int k) {
int[] A = new int[n];
List<List<Integer>> list = new ArrayList<List<Integer>>();
ArrayList<Integer> result = new ArrayList<Integer>();
for (int i = 0; i < n; i++) {
A[i] = i + 1;
}
getCombination(A, k, 0, result, list);
return list;
}
public void getCombination(int[] A, int m, int start,
ArrayList<Integer> result, List<List<Integer>> list) {
if (m == 0) {
list.add((ArrayList<Integer>) result.clone());
return;
}
if (start < A.length) {
result.add(A[start]);
getCombination(A, m - 1, start + 1, result, list);
result.remove(result.size() - 1);
getCombination(A, m, start + 1, result, list);
}
return;
}