文档讲解:代码随想录 (programmercarl.com)
视频讲解:代码随想录的个人空间-代码随想录个人主页-哔哩哔哩视频 (bilibili.com)
LeetCode 39. 组合总和
代码如下:
class Solution {
public:
vector<vector<int>> res;
vector<int>path;
void backtracking(vector<int>& candidates, int target,int sum,int start){
if(sum==target){
res.push_back(path);
return;
}
for(int i=start;i<candidates.size()&&sum+candidates[i]<=target;i++){
path.push_back(candidates[i]);
backtracking(candidates,target,sum+candidates[i],i);
path.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end()); // 需要排序
backtracking(candidates,target,0,0);
return res;
}
};
LeetCode 40.组合总和II
题目链接:40. 组合总和 II - 力扣(LeetCode)
解题代码如下:
class Solution {
public:
vector<vector<int>>res;
vector<int>path;
void backtracking(vector<int>& candidates, int target,int sum,int start,vector<int>used){
if(sum>target)return;
if(sum==target){
res.push_back(path);
return;
}
for(int i=start;i<candidates.size();i++){
if(i>0&&used[i-1]==0&&candidates[i]==candidates[i-1])continue;
sum+=candidates[i];
path.push_back(candidates[i]);
used[i]=1;
backtracking(candidates,target,sum,i+1,used);
used[i]=0;
sum-=candidates[i];
path.pop_back();
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
vector<int> used(candidates.size(),0);
backtracking(candidates,target,0,0,used);
return res;
}
};
LeetCode 131.分割回文串
题目链接:131. 分割回文串 - 力扣(LeetCode)
解题思路:两处难点:1.未能深刻理解切割区间是start和i;2.substr函数的运用
解题代码如下:
class Solution {
public:
vector<vector<string>>res;
vector<string>ss;
bool huiwen(string s,int begin,int end){
while(begin<end){
if(s[begin]!=s[end]){
return false;
}
begin++;
end--;
}
return true;
}
void backtracking(string s,int start){
if(start==s.size()){
res.push_back(ss);
return ;
}
for(int i=start;i<s.size();i++){
if(huiwen(s,start,i)){
string str = s.substr(start, i - start + 1);
ss.push_back(str);
}else continue;
backtracking(s,i+1);
ss.pop_back();
}
}
vector<vector<string>> partition(string s) {
backtracking(s,0);
return res;
}
};