Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.
Each number in C may only be used once in the combination.
Note:
All numbers (including target) will be positive integers.
The solution set must not contain duplicate combinations.
For example, given candidate set [10, 1, 2, 7, 6, 1, 5] and target 8,
A solution set is:
[
[1, 7],
[1, 2, 5],
[2, 6],
[1, 1, 6]
]
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
int length = candidates.length;
Arrays.sort(candidates);
List<List<Integer>> results = new ArrayList<>();
helper(candidates,results,target,0,new ArrayList<>());
List<List<Integer>> results1 = new ArrayList<>();
for (List<Integer> result :
results) {
if (!results1.contains(result)){
results1.add(result);
}
}
return results1;
}
public void helper(int[] candidates,List<List<Integer>> results,int target,int index,List<Integer> curr){
if (target==0){
ArrayList<Integer> item = new ArrayList<>();
item.addAll(curr);
results.add(item);
return;
}
for (int i=index;i<candidates.length;i++){
if (target>=candidates[i]){
curr.add(candidates[i]);
helper(candidates,results,target-candidates[i],i+1,curr);
curr.remove(curr.size()-1);
}
}
}