class Solution {
List<List<Integer>> list = new ArrayList<>();
public List<List<Integer>> combinationSum(int[] candidates, int target) {
Arrays.sort(candidates);
List<Integer> l = new ArrayList<>();
solve(candidates, l, target, 0);
return list;
}
public void solve(int[] nums,List<Integer> l, int target, int index){
if(0==target){
list.add(l);
return;
}
if(target<nums[index])return;
for(int i=index; i<nums.length; i++){
List<Integer> l1 = new ArrayList<>(l);
l1.add(nums[i]);
solve(nums,l1,target-nums[i],i);
}
}
}
在每次递归之前,将list复制一份,避免在递归中影响list中的值,否则,全都add到一个list中了。