39. 组合总和
39. 组合总和 - 力扣(LeetCode)
class Solution {
public:
vector<vector<int>> ans;
vector<int> path;
void combinationSum(vector<int>& candidates, int begin, int target, int& sum){
if(sum > target){
return ;
}
if(sum == target){
ans.push_back(path);
return ;
}
for(int i = begin; i < candidates.size(); i++){
path.push_back(candidates[i]);
sum += candidates[i];
combinationSum(candidates, i, target, sum);
path.pop_back();
sum -= candidates[i];
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
int sum = 0;
combinationSum(candidates, 0, target, sum);
return ans;
}
};
40.组合总和II
40. 组合总和 II - 力扣(LeetCode)
class Solution {
public:
vector<vector<int>> ans;
vector<int> path;
void combinationSum(vector<int>& candidates, int begin, int target, int& sum){
if(sum > target){
return ;
}
if(sum == target){
ans.push_back(path);
return ;
}
for(int i = begin; i < candidates.size(); i++){
path.push_back(candidates[i]);
sum += candidates[i];
combinationSum(candidates, i + 1, target, sum);
path.pop_back();
sum -= candidates[i];
while(i < candidates.size()- 1 && candidates[i] == candidates[i + 1]){
i++;
}// 相同位置不能放相同数字
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
int sum = 0;
sort(candidates.begin(), candidates.end()); // 排序将相同数放在一起
combinationSum(candidates, 0, target, sum);
return ans;
}
};
131.分割回文串
131. 分割回文串 - 力扣(LeetCode)
class Solution {
public:
vector<vector<string>> result;
string path; // 记录单个字符串
bool palindrome(string s){
int left = 0, right = s.size() - 1;
while(left < right){
if(s[left++] != s[right--]){
return false;
}
}
return true;
}
void partition(string s, int begin, vector<string> paths, int pathsLen){
string path;
if(pathsLen == s.size()){
result.push_back(paths);
return ;
}
for(int i = begin; i < s.size(); i++){
path += s[i];
if(palindrome(path)){
paths.push_back(path);
pathsLen += path.size();
partition(s, i + 1, paths, pathsLen);
paths.pop_back();
pathsLen -= path.size();
}
}
}
vector<vector<string>> partition(string s) {
vector<string> paths;
partition(s, 0, paths, 0);
return result;
}
};