一个下标的元素可以在一个结果组合中重复使用(树枝可重复);
数组中没有重复数字,所以不需要去重(不需要考虑树层去重);
java:
class Solution {
public List<List<Integer>> res = new ArrayList<>();
public List<Integer> path = new ArrayList<>();
public int temSum = 0;
public List<List<Integer>> combinationSum(int[] candidates, int target) {
backTracking(candidates, target, 0);
return res;
}
public void backTracking(int[] nums, int target, int startIdx) {
if (temSum > target) {
return ;
}
else if (temSum == target) {
res.add(new ArrayList<>(path));
}
for (int i = startIdx; i < nums.length; i++) {//注!!i是从startIdx开始;
//从0开始会有重复;
temSum += nums[i];
path.add(nums[i]);
backTracking(nums, target, i);//每个数字可以重复使用,所以不用+1
path.remove(path.size() - 1);
temSum -= nums[i];
}
}
}