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 }

 

posted @ 2018-09-10 21:03  jasoncool1  阅读(114)  评论(0编辑  收藏  举报