C++第二阶段——数据结构和算法,之前学过一点点数据结构,当时是基于Python来学习的,现在基于C++查漏补缺,尤其是树的部分。这一部分计划一个月,主要利用代码随想录来学习,刷题使用力扣网站,不定时更新,欢迎关注!
文章目录
- 一、131.分割回文串
- 二、93. 复原 IP 地址
一、131.分割回文串
class Solution {
public:vector<vector<string>> result;vector<string> path;vector<vector<string>> partition(string s) {insertS(s,0);return result;}// 填充函数void insertS(string s,int startIndex){// 结束条件if(startIndex>=s.length()){result.push_back(path);return;}for(int i=startIndex;i<s.length();i++){if(isPart(s,startIndex,i)){path.push_back(s.substr(startIndex,i-startIndex+1));}else{continue;}insertS(s,i+1);path.pop_back();}}// 定义一个判断回文字符串的函数bool isPart(string s,int begin,int end){if(s.length()==1){return true;}while(begin<end){if(s[begin]!=s[end]){return false;}begin++;end--;}return true;}
};
二、93. 复原 IP 地址
class Solution {
public:vector<string> result;int count=0;vector<string> restoreIpAddresses(string s) {if(s.size()<4||s.size()>12) return result;insertS(s,0);return result;}void insertS(string s,int stardIndex){// 收集结果if(count==3){// 判断后面的符不符合规则if(isValid(s,stardIndex,s.length()-1)){result.push_back(s);}return;}for(int i= stardIndex;i<s.length();i++){// 判断前面的符不符合规则if(isValid(s,stardIndex,i)){// 符合规则,在哪个位置插入"."s.insert(s.begin()+i+1,'.');count++;insertS(s,i+2);count--;s.erase(s.begin()+i+1);}else{break;}}}bool isValid(string s,int begin,int end){if (begin > end) {return false;}// 左闭右闭// 1. 第一个为0if(s[begin]=='0'&& begin != end) return false;// 2. 有特殊字符int num = 0;for(int i=begin;i<=end;i++){if((s[i]<='9'&&s[i]>='0')){num= num * 10 + (s[i] - '0');}else{return false;}}// 3. 数字不符合区间if(num>255) return false;return true;}
};