第二十七天|39. 组合总和
39_题目关键字:回溯,结果可重复
39_题目链接
代码实现
package LeetCode;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class YangSibo_39 {
}
class YangSibo_39_1{
LinkedList<Integer> path = new LinkedList<>();
List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> combinationSum(int[] candidates, int target) {
path.clear();
result.clear();
backtracking(0,candidates,target);
return result;
}
public void backtracking(int startindex, int[] candidates, int target){
int sum = 0;
for(int num: path){
sum = sum + num;
}
if(sum > target) return;
if(sum == target) {
result.add(new ArrayList<>(path));
return;
}
for(int i = startindex;i < candidates.length;i++){
path.add(candidates[i]);
backtracking(i,candidates,target);
path.removeLast();
}
}
}
class YangSibo_39_2{
LinkedList<Integer> path = new LinkedList<>();
List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> combinationSum(int[] candidates, int target) {
path.clear();
result.clear();
backtracking(0,candidates,target);
return result;
}
public void backtracking(int startindex, int[] candidates, int target){
int sum = 0;
for(int num: path){
sum = sum + num;
}
if(sum > target) return;
if(sum == target) {
result.add(new ArrayList<>(path));
return;
}
for(int i = startindex;i < candidates.length && (sum + candidates[i] <= target);i++){
path.add(candidates[i]);
backtracking(i,candidates,target);
path.removeLast();
}
}
}
解题注意事项
1、回溯模板明确参数