40. Combination Sum II
避免这个循环的重复 所以i>position && nums[i] == nums[i-1]
1 class Solution { 2 List<List<Integer>> res = new ArrayList<>(); 3 public List<List<Integer>> combinationSum2(int[] candidates, int target) { 4 Arrays.sort(candidates); 5 backtrack(candidates, target, 0, new ArrayList<>(), 0); 6 return res; 7 } 8 9 public void backtrack(int[] candidates, int target, int sum, List<Integer> list, int position) { 10 if(sum > target) return; 11 if(sum == target) { 12 res.add(new ArrayList<>(list)); 13 } 14 for(int i = position; i < candidates.length; i++) { 15 if(i > position && candidates[i] == candidates[i-1]) { //注意 i > position 16 continue; 17 } 18 list.add(candidates[i]); 19 sum += candidates[i]; 20 backtrack(candidates, target, sum, list, i+1); 21 list.remove(list.size() - 1); 22 sum -= candidates[i]; 23 } 24 } 25 }