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.
Elements in a combination (a1, a2, .. , ak) must be in non-descending order. (ie, a1 <= a2 <= ... <= ak).
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]
Solution: Sort & Recursion.
1 class Solution { 2 public: 3 vector<vector<int> > res; 4 void combinationSum(vector<int> &candidates, int target, vector<int> &com, int start) 5 { 6 if(target == 0) { 7 res.push_back(com); 8 return; 9 } 10 for(int i = start; i < candidates.size() && target >= candidates[i]; i++) { 11 com.push_back(candidates[i]); 12 combinationSum(candidates, target-candidates[i], com, i); // start = i; 13 com.pop_back(); 14 } 15 } 16 17 vector<vector<int> > combinationSum(vector<int> &candidates, int target) { 18 sort(candidates.begin(), candidates.end()); 19 vector<int> com; 20 combinationSum(candidates, target, com, 0); 21 return res; 22 } 23 };