1 class Solution { 2 public: 3 vector > combinationSum(vector &nums, int target) { 4 sort(nums.begin(), nums.end()); 5 vector > result; 6 vector intermediate; 7 dfs(nums, target, 0, intermediate, result); 8 return result; 9 }10 private:11 void dfs(vector & nums, int gap, int start, vector & intermediate,12 vector > &result) {13 if (gap == 0) { 14 result.push_back(intermediate);15 return;16 }17 for (size_t i = start; i < nums.size(); i++) { 18 if (gap < nums[i]) return; 19 intermediate.push_back(nums[i]); 20 dfs(nums, gap - nums[i], i, intermediate, result);21 intermediate.pop_back(); 22 }23 }24 };