39.组合总和
难点在于想清楚 从哪开始,每次要从candidates的i开始 因为可以有重复元素,但不能从0开始是因为 如果每次都从0开始会有重复组合。比如 2 2 3 和 3 2 2,所以事实上每个元素都是大于等于前面一个元素的情况。
class Solution {
List<List<Integer>> result = new ArrayList<>();
LinkedList<Integer> path = new LinkedList<>();
public List<List<Integer>> combinationSum(int[] candidates, int target) {
if(candidates.length == 0)return result;
backtrack(candidates,target,0,0);
return result;
}
public void backtrack(int[] candidates,int target,int startIndex,int sum){
if(sum > target)return;
else if(sum == target){
result.add(new ArrayList<>(path));
return;
}
else{
for(int i = startIndex; i < candidates.length;i++){
path.add(candidates[i]);
sum += candidates[i];
backtrack(candidates,target,i,sum);
sum -= candidates[i];
path.removeLast();
}
}
}
}