方法:回溯法
回溯三部曲:模板
class Solution {
//回溯法
//全局变量
public List<List<Integer>>resul=new ArrayList<>();
public List<Integer>path=new ArrayList<>();
public List<List<Integer>> combine(int n, int k) {
backtracking(n,k,0);
return resul;
}
//无返回值
public void backtracking(int n,int k,int start)
{
//终止条件
if(path.size()==k)
{
resul.add(new ArrayList<Integer>(path));
return;
}
//单层递归逻辑
//横向遍历
//优化:i<n-(k-path.size())+1
for(int i=start;i<n-(k-path.size())+1;i++)
{
path.add(i+1);//处理结点
backtracking(n,k,i+1);//递归,这里写的i+1,保证传入的数是往后的
path.remove(path.size()-1);//回溯,撤销处理结果
}
}
}