77. Combinations
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],
]
解法
有序,长度为k,回溯法
public class Solution {
public List<List<Integer>> combine(int n, int k) {
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = i + 1;
}
List<List<Integer>> permutes = new ArrayList<List<Integer>>();
List<Integer> permute = new ArrayList<Integer>();
helper(permutes, permute, nums, k, 0);
return permutes;
}
private static void helper(List<List<Integer>> permutes, List<Integer> permute, int[] nums, int k, int index) {
// 出口
if (permute.size() == k) {
permutes.add(new ArrayList<Integer>(permute));
return;
}
// 过程
for (int i = index; i < nums.length; i++) {
if(permute.contains(nums[i])) {
continue;
}
permute.add(nums[i]);
helper(permutes, permute, nums, k, i + 1);
permute.remove(permute.size() - 1);
}
}
}