原题网址:https://leetcode.com/problems/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], ]
方法:深度优先搜索。
public class Solution {
private List<List<Integer>> result = new ArrayList<>();
private void find(List<Integer> nums, int n, int left) {
if (left == 0) {
List<Integer> r = new ArrayList<>();
r.addAll(nums);
result.add(r);
return;
}
int min = 0;
if (nums.size() > 0) min = nums.get(nums.size()-1);
for(int i=min+1; i<=n-left+1; i++) {
nums.add(i);
find(nums, n, left-1);
nums.remove(nums.size()-1);
}
}
public List<List<Integer>> combine(int n, int k) {
find(new ArrayList<>(), n, k);
return result;
}
}