描述
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
分析
1. 参数及返回值
存放符合条件的res、每个符合条件的List可以设为全局变量,这样回溯方法的参数简洁很多。
确定每次遍历的起始位置的变量设为start,每次从集合中选取元素,可选择的范围随着选择的进行而收缩,调整可选择的范围,就是要靠start
2. 回溯终止条件
当存放单个结果的集合List的长度等于k时,终止回溯。
3. 单层搜索过程
for循环中i从start取到n
class Solution {
List<List<Integer>> res = new ArrayList<>();
List<Integer> list = new ArrayList<>();
public List<List<Integer>> combine(int n, int k) {
backTracking(n, k, 1);
return res;
}
public void backTracking(int n, int k, int start){
if(list.size() == k){
res.add(new ArrayList<>(list));
return;
}
for(int i = start; i <= n; i++){
list.add(i);
backTracking(n,k,i+1);
list.remove(list.size()-1);
}
}
}