DFS和回溯专题:组合总和
题目描述
代码纯享版
class Solution {
public List<List<Integer>> list_all = new ArrayList();
public List<Integer> list = new ArrayList();
public List<List<Integer>> combinationSum(int[] candidates, int target) {
backtrack(candidates, target, 0, 0);
return list_all;
}
void backtrack(int[] candidates, int target, int start, int sum){
if(sum == target){
list_all.add(new ArrayList(list));
return;
}
if(sum > target){
return;
}
for(int i = start; i < candidates.length; i++){
list.add(candidates[i]);
backtrack(candidates, target, i, sum + candidates[i]);
list.remove(list.size() - 1);
}
}
}
代码逐行解析版
class Solution {
public List<List<Integer>> list_all = new ArrayList();
public List<Integer> list = new ArrayList();
public List<List<Integer>> combinationSum(int[] candidates, int target) {
backtrack(candidates, target, 0, 0);
return list_all;
}
void backtrack(int[] candidates, int target, int start, int sum){
if(sum == target){
list_all.add(new ArrayList(list));
return;
}
if(sum > target){
return;
}
for(int i = start; i < candidates.length; i++){
list.add(candidates[i]);
backtrack(candidates, target, i, sum + candidates[i]);
list.remove(list.size() - 1);
}
}
}