39. 组合总和
题目:力扣
class Solution {
public:
vector<vector<int> > result;
vector<int> v;
void backtracking(vector<int>& candidates, int sum,int target,int start){
if(sum > target) return;
if(sum == target){
result.push_back(v);
}
for(int i = start; i < candidates.size(); ++i){
sum += candidates[i];
v.push_back(candidates[i]);
backtracking(candidates,sum,target,i);
sum -=candidates[i];
v.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
backtracking(candidates,0,target,0);
return result;
}
};
40.组合总和II
题目:力扣
class Solution {
public:
vector<vector<int> > result;
vector<int> v;
void backtracking(vector<int>& candidates, int sum,int target,int start){
if(sum > target) return;
if(sum == target){
result.push_back(v);
}
for(int i = start; i < candidates.size(); ++i){
//同一层的去重
if(i > start && candidates[i] == candidates[i-1]){
continue;
}
sum += candidates[i];
v.push_back(candidates[i]);
backtracking(candidates,sum,target,i+1);
sum -=candidates[i];
v.pop_back();
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
backtracking(candidates,0,target,0);
return result;
}
};
131.分割回文串
题目:力扣
class Solution {
public:
vector<vector<string>> result;
vector<string> ans;
bool is_reverse(string t){
string t1 = t;
reverse(t1.begin(),t1.end());
if(t1 == t) return true;
return false;
}
void backtracking(string s,int start){
if(start == s.size()){
result.push_back(ans);
return;
}
for(int i = start; i < s.size(); ++i){
string a = s.substr(start,i - start +1);
//string a = "";
//for(int j = start; j <= i; ++j){
// a += s[j];
//}
if(is_reverse(a)){
ans.push_back(a);
backtracking(s,i+1);
ans.pop_back();
}
}
}
vector<vector<string>> partition(string s) {
backtracking(s,0);
return result;
}
};
总结
题型:组合,分割字符串(字符子串问题)