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);
}
}
}