回溯解法思路:
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();}}
}