77. Combinations
- 思路
-
class Solution { //公共参数 List<List<Integer>> res = new ArrayList(); LinkedList<Integer> path = new LinkedList(); public List<List<Integer>> combine(int n, int k) { helper(n, k, 1); return res; } //返回值 和 参数 private void helper(int n, int k, int startIndex){ // 终止条件 if(path.size() == k){ res.add(new ArrayList(path)); return; } //单层逻辑 //这里可以减枝 i <= n -(k - path.size()) +1 // k-path.size() <= n -i +1 //(k - path.size())是需要的元素数量 // n - i +1 刚好是剩下的元素数量 //需要的元素数量<=剩下的元素数量 for(int i = startIndex; i <= n; i++){ //for循环横向遍历 path.add(i);//处理节点 helper(n, k, i + 1);//递归纵向遍历 path.removeLast();//回溯处理过的节点 } } }
-