Title:
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 is used once in the combination.
Note:
- All numbers (including target) would be positive integers.
- Elements in a combination (a1, a 2, ..., aK) must is in non-descending order. (ie, a1≤ a2≤ ... ≤ ak).
- The solution set must not contain duplicate combinations.
For example, given candidate set and 10,1,2,7,6,1,5 target 8 ,
A Solution set is:
[1, 7]
[1, 2, 5]
[2, 6]
[1, 1, 6]
Idea: Dfs search. Unlike combination sum, the alternate for each search is the element starting at the current index to the end of the array. Does not include duplicate elements.
classSolution { Public: Vector<vector<int> >results; Vector<vector<int> > CombinationSum2 (vector<int> &num,inttarget) { if(Num.empty () | | num.size () = =0) returnresults; Sort (Num.begin (), Num.end ()); Vector<int>result; Combine (num,0, Target,result); returnresults; } voidCombine (vector<int> &num,intStartIndex,inttarget,vector<int> &result) { if(0==target) { //cout<< "Add" <<endl;results.push_back (Result); return ; } if(0>target)return ; for(inti = StartIndex; I < num.size (); i++){ if(i > StartIndex && num[i] = = num[i-1]) Continue; Result.push_back (Num[i]); Combine (num,i+1, target-Num[i],result); Result.pop_back (); } }};
Leetcode:combination Sum2