class Solution { public List> combinationSum2(int[] candidates, int target) { List> result = new ArrayList<>(); Arrays.sort(candidates); backtrack(candidates, result, new ArrayList(), target, 0); return result; } public void backtrack(int [] candidates, List> result, List temp, int stepDiff, int start) { if(stepDiff < 0) return; else if(stepDiff == 0) result.add(new ArrayList(temp)); else { for(int i=start; istart && candidates[i] == candidates[i-1]) continue; temp.add(candidates[i]); backtrack(candidates, result, temp, stepDiff-candidates[i], i+1); temp.remove(temp.size()-1); } } } }