1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include <vector>
using std::vector;
class Solution { private: void __combinationSum(vector<int> &candidates, int target, vector<vector<int> > &res, vector<int> &curr, int curr_sum, int pos) { if (curr_sum == target) { res.push_back(curr); return; } else if (curr_sum > target) { return; }
int i, n = candidates.size(); for (i = pos; i < n; i++) { curr.push_back(candidates[i]); curr_sum += candidates[i];
__combinationSum(candidates, target, res, curr, curr_sum, i);
curr_sum -= candidates[i]; curr.pop_back(); } }
public: vector<vector<int> > combinationSum(vector<int> &candidates, int target) { vector<vector<int> > res; vector<int> curr; __combinationSum(candidates, target, res, curr, 0, 0);
return res; } };
|