代码如下:
class Solution {
public:
vector<vector<int>> res;
vector<int> q;
vector<vector<int>> combinationSum(vector<int>& c, int target) {
dfs(c, 0, target);
return res;
}
//数组,取哪个数(下标),还剩多少数要取出来
void dfs(vector<int>& c, int p, int target){
//凑够了,答案添加进去,返回
if(target == 0) {
res.push_back(q);
return;
}
//当前分支走到头了,没有答案
if(p == c.size()) return;
//当前下标取几个,从0开始,但是取0个的时候不放进去
//所以先dfs,第二次i = 1的时候,就是里面放了一个了
//第三次i = 2的时候,答案里放了两个了
for(int i = 0; c[p] * i <= target; i ++){
dfs(c, p + 1, target - c[p] * i);
q.push_back(c[p]);
}
//恢复现场,刚才放了几个,现在就拿出去几个
for(int i = 0; c[p] * i <= target; i ++){
q.pop_back();
}
}
};