public void backTracking(int[] candidates,int target,List<Integer> path,List<List<Integer>> res,int sum,int index){
if(sum>target) return;
if(sum==target){
res.add(new ArrayList(path));
return;
}
for(int i=index;i<candidates.length&&candidates[i]+sum<=target;i++){
if(i>0&&candidates[i]==candidates[i-1]&&!used[i-1]){
continue;
}
path.add(candidates[i]);
used[i]=true;
backTracking(candidates,target,path,res,sum+candidates[i],i+1);
used[i]=false;
path.remove(path.size()-1);
}
}
public void backTracking(int[] candidates,int target,List<Integer> path,List<List<Integer>> res,int sum,int index){
if(sum>target) return;
if(sum==target){
res.add(new ArrayList(path));
return;
}
for(int i=index;i<candidates.length&&candidates[i]+sum<=target;i++){
if(i>0&&candidates[i]==candidates[i-1]&&!used[i-1]){
continue;
}
path.add(candidates[i]);
used[i]=true;
sum+=candidates[i];
backTracking(candidates,target,path,res,sum,i+1);
sum-=candidates[i]
used[i]=false;
path.remove(path.size()-1);
}
}
sum值回溯可以通过传参的方法省去多余代码。