import java.util.*;
public class Solution {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> out = new ArrayList<Integer>();
public ArrayList<ArrayList<Integer>> combinationSum2(int[]candidates , int target) {
if(candidates == null || candidates.length <= 0) return null;
Arrays.sort(candidates);
dfs(candidates,target,0);
return res;
}
public void dfs(int[] candidates,int target, int start){
if(target == 0){
res.add(new ArrayList<>(out));
return;
}
for (int i = start; i < candidates.length; i++){
if (i > start && candidates[i] == candidates[i - 1]) continue;
target-=candidates[i];
if(target < 0) {
return ;
}
out.add(candidates[i]);
dfs(candidates,target,i+1);
target+=candidates[i];
out.remove(out.size()-1);
}
}
}