题目
给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用 一次 。
注意:解集不能包含重复的组合。
代码
class Solution {
List<List<Integer>> res = new ArrayList<>();
List<Integer> path = new ArrayList<>();
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
Arrays.sort(candidates);
boolean[] userd = new boolean[candidates.length];
backTracking(candidates,target,0,0,userd);
return res;
}
public void backTracking(int[] candidates,int target,int sum,int index,boolean[] userd){
if(sum > target){
return;
}
if(sum == target){
res.add(new ArrayList<>(path));
return;
}
for(int i=index; i<candidates.length; i++){
if(i>0 && candidates[i] == candidates[i-1] && userd[i-1]==false){
continue;
}
path.add(candidates[i]);
sum += candidates[i];
userd[i] = true;
backTracking(candidates,target,sum,i+1,userd);
userd[i] = false;
sum -= candidates[i];
path.remove(path.size()-1);
}
}
}