题干:
代码:
class Solution {
public:
vector<int> tmp;
vector<vector<int>> res;
void backtracking(vector<int>& candidates, int target, int sum, int start){
if(sum > target) return;//不加会导致报错
if(sum == target){
res.push_back(tmp);
return;
}
for(int i = start; i < candidates.size(); i++){
sum += candidates[i];
tmp.push_back(candidates[i]);
backtracking(candidates, target, sum, i);
sum -= candidates[i];
tmp.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
backtracking(candidates, target, 0, 0);
return res;
}
};
一开始没有加
if(sum > target) return;
结果报错了:
我感觉是因为之前的终止判断都是包含数组大小限制的,而这道题没有组合大小限制,所以需要加上额外限制条件,比方说之前的都是if(tmp.size() == k && sum == n){res.push_back, return}。所以得加上if(sum > target)return.