39. 组合总和
class Solution {
public:
vector<vector<int>> result;
vector<int> temp;
void backtracking(int begin, vector<int>& candidates, int target, int sum){
if(sum>=target){
if(sum == target){
result.push_back(temp);
}
return;
}
for(int i=begin; i<candidates.size();i++){
temp.push_back(candidates[i]);
sum += candidates[i];
backtracking(i, candidates, target, sum);
temp.pop_back();
sum -= candidates[i];
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
backtracking(0, candidates, target, 0);
return result;
}
};
参考文章:代码随想录-39. 组合总和
40.组合总和II
class Solution {
public:
vector<vector<int>> result;
vector<int> temp;
void backtracking(int begin, vector<int>& candidates, int target, int sum){
if(sum>=target){
if(sum == target){
result.push_back(temp);
}
return;
}
for(int i=begin; i<candidates.size();i++){
if(i > begin && candidates[i] == candidates[i-1]){
continue;
}
temp.push_back(candidates[i]);
sum += candidates[i];
backtracking(i+1, candidates, target, sum);
temp.pop_back();
sum -= candidates[i];
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end());
backtracking(0, candidates, target, 0);
return result;
}
};
参考文章:代码随想录-40.组合总和II
131.分割回文串
class Solution {
public:
vector<vector<int>> result;
vector<int> temp;
void backtracking(int begin, vector<int>& candidates, int target, int sum){
if(sum>=target){
if(sum == target){
result.push_back(temp);
}
return;
}
for(int i=begin; i<candidates.size();i++){
if(i > begin && candidates[i] == candidates[i-1]){
continue;
}
temp.push_back(candidates[i]);
sum += candidates[i];
backtracking(i+1, candidates, target, sum);
temp.pop_back();
sum -= candidates[i];
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end());
backtracking(0, candidates, target, 0);
return result;
}
};
参考文章:代码随想录-131.分割回文串