回溯算法:组合I
class Solution {
List<List<Integer>> result = new ArrayList(); // 所有结果集
List<Integer> list = new ArrayList(); // 当前结果集
public List<List<Integer>> combine(int n, int k) {
dfs(n, k, 1);
return result;
}
public void dfs(int n, int k, int index) {
if (list.size() == k) { // 当前结果集等于要收集的数量即可存入最终结果集
List<Integer> tem = new ArrayList(list);
result.add(tem);
return;
}
for (int i = index; i <= n; i++) {
list.add(i); // 元素加入当前结果集
dfs(n, k, i + 1); // 递归
list.remove(list.size() - 1); // 该元素组合完成可以移除(回溯)
}
}
}