力扣:77. 组合
回溯解法思路:
1.先定义一个接收全部组合的集合,在定义一个单个组合的集合,再写一个回溯方法来进行回溯,
回溯终止条件,把单个集合中的组合加入到大集合去,同时选择下一个值进行递归组合,递归到达到组合的个数时,回溯,删除处理的点进行下一个点的组合。
class Solution {
//返回全部数字组合的接收集合
List<List<Integer>> li1=new ArrayList<>();
//数字组合的集合
List<Integer> li2=new ArrayList<>();
public List<List<Integer>> combine(int n, int k) {
//回溯函数
huisu(n,k,1);
return li1;
}
//定义的回溯函数
public void huisu(int n,int k,int startIndex){
//组合的终止条件
if(li2.size()==k){
li1.add(new ArrayList<>(li2));
return ;
}
//进行组合的for循环
for(int i=startIndex;i<=n;i++){
li2.add(i);
//递归k-1次来生成组合元素。
huisu(n,k,i+1);
li2.removeLast();
}
}
}