链接
参考
思路
这就是简单背包问题嘛2333,前两天刚写过。不过当时我是用一个数组,对应背包中的物品,0表示不取,1表示取。现在尝试直接把最后取的物品直接用一个数组存储。
code
c++
class Solution {
public:
void backtrack(vector<vector<int>> &List, vector<int> candidates, int target, int start, vector<int> &temlist){
if(target == 0)
{
List.push_back(temlist);
}
else if(target < 0)
{
return;
}
else
{
for(int i = start; i < candidates.size(); i++)
{
temlist.push_back(candidates[i]);
backtrack(List, candidates, target - candidates[i], i, temlist);
temlist.pop_back();
}
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> List;
vector<int> temlist;
int start = 0;
backtrack(List, candidates, target, start, temlist);
return List;
}
};
这里不会出错吗?(q)
temlist.push_back(candidates[i]);
temlist.pop_back();