东莞做网站建设百度榜单
这几个个题其实都差不多,唯一不同的就是都是在第一题的基础上添加几个判断条件
第一题是基础问题,就是传统的回溯问题,使用回溯的模板就可以解决
if(退出的判断条件){存放结果return;
}
for(){处理节点recur(路径,选择列表);递归回溯,撤销处理结果
}
该题的代码如下
class Solution {List<List<Integer>> res = new ArrayList<>();LinkedList<Integer> list = new LinkedList<>();public List<List<Integer>> combine(int n, int k) {recur(n,k,1);return res;}public void recur(int n,int k,int index){if(list.size() == k){res.add(new ArrayList<>(list));return;}for(int i = index;i <= n; i++){list.add(i);recur(n,k,i+1);list.removeLast();}}
}
本题和上一题差不多,只是添加了判断条件
class Solution {List<List<Integer>> res = new ArrayList<>();LinkedList<Integer> list = new LinkedList<>();public List<List<Integer>> combinationSum3(int k, int n) {recur(k,n,1);return res;}public void recur(int k,int n,int pos){if(n<0) return;if(list.size()==k){if(n==0) res.add(new ArrayList<>(list));return;}for(int i = pos;i<=9;i++){list.add(i);recur(k,n-i,i+1);list.removeLast();}}
}