import java.util.* ;
public class Solution {
public ArrayList<ArrayList<Integer>> combinationSum2(int[] num, int target) {
Arrays.sort(num) ;
ArrayList<ArrayList<Integer>> res = new ArrayList<>() ;
help(target , num , 0 , res , new ArrayList<Integer>()) ;
return res ;
}
public void help(int target , int[] num , int idx , ArrayList<ArrayList<Integer>> res , ArrayList<Integer> tmp) {
if(target == 0) {
res.add(new ArrayList<Integer>(tmp)) ;
return ;
}
for(int i = idx ; i < num.length ; i ++) {
if(num[i] > target) return ;//剪枝
if((i > idx && num[i] == num[i-1])) continue ;//去重
tmp.add(num[i]) ;
help(target-num[i] , num , i + 1 , res , tmp) ;//递归
tmp.remove(tmp.size() - 1) ;//回溯
}
}
}