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) ;//回溯 } } }