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]
C + + Implementation code:
#include <iostream>#include<vector>#include<algorithm>using namespacestd;classSolution { Public: Vector<vector<int> > CombinationSum2 (vector<int> &num,inttarget) { if(Num.empty ())returnvector<vector<int> >(); Sort (Num.begin (), Num.end ()); Vector<vector<int> >ret; Vector<int>path; Combination (num,0, Target,ret,path); returnret; } voidCombination (vector<int> &candidates,intStartinttarget,vector<vector<int> > &ret,vector<int> &path) { if(target<0) return; if(target==0) {ret.push_back (path); return; } inti; for(i=start;i< (int) candidates.size (); i++) { if(i>start&&candidates[i]==candidates[i-1]) Continue; Path.push_back (Candidates[i]); Combination (Candidates,i+1, target-Candidates[i],ret,path); Path.pop_back (); } }};intMain () {solution S; Vector<int> vec={0,0,Ten,1,2,7,6,1,5}; Vector<vector<int> > result=s.combinationsum2 (VEC,8); for(Auto A:result) { for(auto v:a) cout<<v<<" "; cout<<Endl; }}
Operation Result:
Combination Sum II