【回溯法】因为不能有重复元素,所以下一次的dfs要从上次用过的i的下一个开始。
class Solution {
List<List<Integer>> ans = new ArrayList();
int n, k;
void dfs(int t, int idx, LinkedList<Integer> list) {
if (t == k) {
ans.add(new ArrayList(list));
return ;
}
for (int i = idx + 1; i <= n; i++) {
list.push(i);
dfs(t + 1, i, list);
list.poll();
}
}
public List<List<Integer>> combine(int n, int k) {
this.n = n;
this.k = k;
LinkedList<Integer> list = new LinkedList();
dfs(0, 0, list);
return ans;
}
}