| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 | class Solution {public:
 int n;
 int target;
 vector<vector<int>> res;
 vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
 this->target = target;
 n = candidates.size();
 vector<int> vec;
 search(0, 0, vec, move(candidates));
 return res;
 }
 void search(int index, int sum, vector<int> & vec, vector<int>&& candidates) {
 if(sum == target) {
 res.push_back(vec);
 return;
 }
 if(sum > target) return;
 vec.push_back(candidates[index]);
 search(index, sum+candidates[index], vec, move(candidates));
 vec.pop_back();
 if(index+1 < n) {
 search(index+1, sum, vec, move(candidates));
 }
 }
 };
 
 |