List<List<Integer>> ans = new ArrayList<>();
List<Integer> list = new ArrayList<>();
public List<List<Integer>> combine(int n, int k) {
dfs(n, k, 1);
return ans;
}
private void dfs(int n, int k, int p) {
if (list.size() == k) {
ans.add(new ArrayList<>(list));
return;
}
for (int i = p; i <=n; i++) {
list.add(i);
dfs(n, k, i + 1);
list.remove(list.size() - 1);
}
}
这里有的p是取数的开始位置,在递归时,使用p+1就是排列:
23和32都会被取出来,因为i+1在for循环里,每次递归是会移动的,也就不会再前去取前面的数值