class Solution {
public:
vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
int n = candidates.size();
return combinationSumHelper(candidates, n - 1, target);
}
vector<vector<int> > combinationSumHelper(const vector<int>& candidates, int index, int target) {
vector<vector<int> > result;
if(index < 0) {
return result;
}
int i = 0;
while(target - i * candidates[index] >= 0) {
vector<vector<int> > ret = combinationSumHelper(candidates, index -1, target - i * candidates[index]);
for(auto& entry:ret) {
for(int j = 0; j < i; j++) {
entry.emplace_back(candidates[index]);
}
sort(entry.begin(), entry.end());
result.emplace_back(entry);
}
if(target - i * candidates[index] == 0 && ret.empty()) {
vector<int> entry;
for(int j = 0; j < i; j++) {
entry.emplace_back(candidates[index]);
}
result.emplace_back(entry);
}
i++;
}
return result;
}
};
Pages
▼
No comments:
Post a Comment