leetcode传送通道
暂时记录,这篇没啥营养,不用看了
class Solution {List<List<Integer>> result = new ArrayList<>(); // 存所有组合List<Integer> path = new LinkedList<>(); //存每一个组合public List<List<Integer>> combine(int n, int k) {recur(n, k, 1);return result;}// 定义递归/回溯函数private void recur(int n, int k, int startNum){// 结束条件if(path.size()==k){result.add(new ArrayList<>(path));return;}// 感觉回溯就是通过递归解决直接写写不完的暴力// for(int i=startNum; i<=n; i++){// path.add(i);// recur(n,k,i+1);// path.removeLast(); // 关键// }// 优化:剪枝,调整i的范围,把n替换成i的最大到达位置,该位置之后组合不足k个不用遍历for(int i=startNum; i<=n-(k-path.size())+1; i++){path.add(i);recur(n,k,i+1);path.removeLast(); // 关键}}
}