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
| vector<vector<int>> res; vector<int> ans; vector<vector<int>> combinationSum(vector<int>& candidates, int target) { sort(candidates.begin(), candidates.end()); ans = vector<int>(candidates.size(), 0); func(candidates, target, 0); return res; } void func(vector<int>& candidates, int target, int index) { if (target == 0) { vector<int> vec; for(int i = 0;i <candidates.size(); i++) { for(int c = ans[i], v = candidates[i];c > 0;c--) { vec.push_back(v); } } res.push_back(vec); return; } if (index == candidates.size()) return ; for(int c = 0;c * candidates[index] <= target; c++) { ans[index] = c; func(candidates, target - c*candidates[index], index + 1); } ans[index] = 0; }
|