Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
The same repeated number may be chosen from C unlimited number of times.
Note:
- All numbers (including target) will be positive integers.
- The solution set must not contain duplicate combinations.
For example, given candidate set [2, 3, 6, 7]
and target 7
,
A solution set is:
[ [7], [2, 2, 3] ]
1 public class Solution { 2 public List<List<Integer>> combinationSum(int[] candidates, int target) { 3 List<List<Integer>> result = new ArrayList<>(); 4 if (candidates == null || candidates.length == 0) { 5 return result; 6 } 7 List<Integer> list = new ArrayList<>(); 8 Arrays.sort(candidates); 9 helper(candidates, result, list, 0, target); 10 return result; 11 } 12 13 private void helper(int[] candidates, List<List<Integer>> result, List<Integer> list, int index, int target) { 14 if (target == 0) { 15 result.add(new ArrayList<Integer>(list)); 16 } 17 for (int i = index; i < candidates.length; i++) { 18 if (candidates[i] > target) { 19 break; 20 } 21 if (i != index && candidates[i] == candidates[i - 1]) { 22 continue; 23 } 24 list.add(candidates[i]); 25 helper(candidates, result, list, i, target - candidates[i]); 26 list.remove(list.size() - 1); 27 } 28 } 29 }