题目
Given a set of candidate numbers (C) (without duplicates) 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.
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 {
public:
vector<vector<int> > combinationSum(vector<int>& candidates, int target) {
vector<vector<int> > res;
vector<int> path;
sort(candidates.begin(),candidates.end());
helper(candidates, 0, 0, target, path, res);
return res;
}
void helper(vector<int>& nums,
int pos,
int base,
int target,
vector<int> &path,
vector<vector<int> > &res) {
if(base == target){
res.push_back(path);
return;
}
if(base > target)
return;
for(int i=pos; i<nums.size(); i++){
path.push_back(nums[i]);
helper(nums, i, base+nums[i], target, path, res);
path.pop_back();
}
}
};