注意:candidates中的元素可以重复
最后返回的结果不可以重复
一:Java
class Solution {
List<List<Integer>> ans = new LinkedList<>();
List<Integer> list = new LinkedList<>();
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
Arrays.sort(candidates);
int sum=0;
df(candidates, target, 0,0);
return ans;
}
public void df(int[] candidates, int target,int start,int sum){
if(sum>target) return ;
if (sum==target) {
ans.add(new LinkedList<>(list));
return ;
}
for (int i = start; i < candidates.length; i++) {
if (i>start && candidates[i]==candidates[i-1]) {
continue;
}
list.add(candidates[i]);
sum+=candidates[i];
df(candidates, target, i+1, sum);
sum-=candidates[i];
list.removeLast();
}
}
}
为什么不能是i>0 && candidates[i]==candidates[i-1]
if (i>start && candidates[i]==candidates[i-1]) {
continue;
}
结果错误:i>0 && candidates[i]==candidates[i-1] -- candidates中的重复元素不会被重复使用