思路:类似多背包问题,得到方案。
难点:不熟悉模板
if (满足条件) {
更新ans;
return ;
}
if (index == n - 1 || 不满足条件) return ;
ans.push_back(a[m]);
dfs(m);
ans.pop_back();
dfs(m+1);
class Solution {
public:
vector<vector<int>> ans;
void dfs(vector<int>& candidates, int target, int index, int sum, vector<int>& tmp) {
if (index == candidates.size() || sum > target) return ;
if (sum == target) {
ans.push_back(tmp);
return ;
}
tmp.push_back(candidates[index]);
dfs(candidates, target, index, sum + candidates[index], tmp);
tmp.pop_back();
dfs(candidates, target, index + 1, sum, tmp);
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<int> tmp;
dfs(candidates, target, 0, 0, tmp);
return ans;
}
};