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