Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sum to target.
Each number in candidates may only be used once in the combination.
Note: The solution set must not contain duplicate combinations.
Example 1:
Input: candidates = [10,1,2,7,6,1,5], target = 8 Output: [ [1,1,6], [1,2,5], [1,7], [2,6] ] Example 2:
Input: candidates = [2,5,2,1,2], target = 5 Output: [ [1,2,2], [5] ]
Constraints:
1 <= candidates.length <= 100 1 <= candidates[i] <= 50 1 <= target <= 30
public class Solution {
IList<IList<int>> ans = new List<IList<int>>();
HashSet<string> set = new HashSet<string>();
public IList<IList<int>> CombinationSum2(int[] candidates, int target) {
var res = new List<int>();
Array.Sort(candidates);
Helper(candidates, target, res, 0);
return ans;
}
private void Helper(int[] candidates, int target, List<int> res, int start){
if(target == 0){
var temp = new List<int>();
foreach(var item in res){
temp.Add(item);
}
ans.Add(temp);
return;
}
if(target < 0)
{
return;
}
for(int i=start;i<candidates.Length;i++){
if(i>start && candidates[i]==candidates[i-1]){
continue;
}
res.Add(candidates[i]);
Helper(candidates, target-candidates[i], res, i+1);
res.RemoveAt(res.Count()-1);
}
}
}
Time Complexity: O(2^n)
Space Complexity: O(1)


