Given a set of candidate numbers (C)(without duplicates) and a target number (T), find all unique combinations inC 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.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]]class Solution { PRivate: int index_count; vector<vector<int> > results; public: void backtrace(int target, int sum, vector<int>& candidates, vector<int>& index, int n) { if (sum > target) { return; } if (sum == target) { vector<int> result; for (int i = 1; i <= n; ++i) { result.push_back(candidates[index[i]]); } results.push_back(result); return; } // To avoid repeat for (int i = index[n]; i < candidates.size(); ++i) { index[n+1] = i; backtrace(target, sum + candidates[i], candidates, index, n+1); } } vector<vector<int>> combinationSum(vector<int>& candidates, int target) { sort(candidates.begin(), candidates.end()); vector<int> real_cdts; for (int i = 0; i < candidates.size(); ++i) { if (candidates[i] <= target) { real_cdts.push_back(candidates[i]); } else { break; } } index_count = 10000; vector<int> index = vector<int>(index_count, 0); results.clear(); backtrace(target, 0, real_cdts, index, 0); return results; }};
新闻热点
疑难解答