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