Question
Similar to Question Leetcode 39. Combination Sum . Only this time the same number in the array can be used once .
Similar Questions
Solution Solution referenced from here: https://leetcode.com/problems/combination-sum-ii/discuss/16878/Combination-Sum-I-II-and-III-Java-solution-(see-the-similarities-yourself)
The whole algorithm works 99% same as 39. Combination Sum . We only need to make sure that each number is only used once in the result. So how do we achieve that. We can sort the input array and skip the numner if it’s same with previous number.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 public List<List<Integer>> combinationSum(int [] candidates, int target) { List<List<Integer>> results = new ArrayList<>(); Arrays.sort(candidates); backtrack(results, new ArrayList<>(), candidates, target, 0 ); return results; } private static void backtrack (List<List<Integer>> results, List<Integer> tempList, int [] candidates, int remaining, int start) { if (remaining < 0 ) { return ; } else if (remaining == 0 ) { results.add(new ArrayList<>(tempList)); } else { for (int i = start; i < candidates.length; i++) { if (i > start && candidates[i] == candidates[i - 1 ]) { continue ; } tempList.add(candidates[i]); backtrack(results, tempList, candidates, remaining - candidates[i], i + 1 ); tempList.remove(tempList.size() - 1 ); } } }