题目描述:
解题思路:递归搜索,找到 = target 的组合存下来即可,代码如下:
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> res;
vector<int> out;
combinationSum(candidates, target, 0, out, res);
return res;
}
private:
void combinationSum(vector<int>& candidates,int target,int begin,vector<int>& out,vector<vector<int>>& res){
if(target < 0) return ;
else if(target == 0){
res.push_back(out);
return ;
}
else{
for(int i = begin;i < candidates.size();i++){
out.push_back(candidates[i]);
combinationSum(candidates,target - candidates[i],i,out,res);
out.pop_back();
}
}
}
};
这里要注意以下,对out要传引用,不然就会变成这样:
个人猜测应该是每层都新开辟空间导致超时,大多数人应该都不会这样写,请忽略。。
还有看到差不多的做法有些写法先把candidates sort了一遍,这题sort不sort应该完全没有关系吧。