Given two integersnandk, return all possible combinations ofknumbers out of 1 ...n.
For example,
Ifn= 4 andk= 2, a solution is:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
tag: backtracking
class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> ans = new ArrayList<>();
dfs(n, k, 1, new ArrayList<>(), ans);
return ans;
}
private void dfs(int n, int k, int index, List<Integer> path, List<List<Integer>> ans){
if (path.size() == k){
ans.add(new ArrayList<Integer>(path));
return;
}
for (int i = index; i <= n; i++){
path.add(i);
dfs(n, k, i + 1, path, ans);
path.remove(path.size() - 1);
}
}
}