暴力深搜
class Solution {
public:
vector<vector<int>> ans;
vector<int> val;
void dfs(vector<int>& candidates, int target, int index) {
if (target == 0) {
ans.push_back(val);
return;
}
if (index == candidates.size()) return;
int i = 0;
while (++i*candidates[index] <= target) val.push_back(candidates[index]);
for (int k = i - 1; k >= 0; --k) {
dfs(candidates, target - k * candidates[index], index + 1);
if (k) val.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
dfs(candidates, target, 0);
return ans;
}
};