目录
77 组合
暴力
减枝优化
77 组合
暴力
class Solution {List<List<Integer>>res = new ArrayList<>();LinkedList<Integer>newList = new LinkedList<>();public List<List<Integer>> combine(int n, int k) {dfs(n,k,1);return res;}private void dfs(int n,int k,int num){if(newList.size() == k){res.add(new ArrayList<>(newList));return;}for(int i = num;i <= n;i++){newList.add(i);dfs(n,k,i + 1);newList.removeLast();}}
}
减枝优化
在遍历过程中,如果n = 4,k = 4,那么答案只有[1,2,3,4]一种,如果第一次for循环开始从2开始,那么剩下的遍历是没有意义的,我们可以据此进行减枝优化。
class Solution {List<List<Integer>>res = new ArrayList<>();LinkedList<Integer>newList = new LinkedList<>();public List<List<Integer>> combine(int n, int k) {dfs(n,k,1);return res;}private void dfs(int n,int k,int num){if(newList.size() == k){res.add(new ArrayList<>(newList));return;}for(int i = num;i <= n - (k - newList.size()) + 1;i++){//减枝操作newList.add(i);dfs(n,k,i + 1);newList.removeLast();}}
}