一:每日论语解读
follow me !! 君子坦荡荡 小人常威威
二:题目
三:上码
class Solution {
public:
/**
思路:1.分析题意本题依然是切割字符串(我们需要对要分割的字符串做出处理 需要判断我们截取的字符串
是否合法)
2。关于‘.’的处理 我们是在原字符串的基础上进行插入和删除
*/
vector<string>ans;
//参数 index 是因为防止出现重复 ,pointNum 是记录小数点的数量 当小数点的数量为3的时候 我们
//就已经切割成了4段
void backstacking(string &s,int index,int pointNum) {
if(pointNum == 3) {
//判断第四段函数是否合法
if(isgoodStr(s,index,s.size()-1)){//字符串最后一位的下标比字符串长度小一
ans.push_back(s);
}
return;
}
for(int i = index; i < s.size(); i++) {
if(isgoodStr(s,index,i)) {
pointNum++;
s.insert(s.begin()+i+1,'.');//这里插入函数的第一位是代表我们要插入的位置
backstacking(s,i+2,pointNum);//插入'.'后下一个字串的起始位置是i+2
pointNum--;
s.erase(s.begin()+i+1);
}else{
break;//如果不合法就跳过此层的遍历
}
}
}
//判断截取的字符串是否合法
bool isgoodStr(string &s,int start,int end) {
if(start > end) return false;//如果不加上这一步的话 那么就会出现ip 第四个数为空的状况
//如果开头是0那就不合适 但是单个的0是合适的 所以需要start != end
if(s[start] == '0' && start != end) {
return false;
}
int num = 0;
//接下俩就是判断输入的字符是否超过255 是否合法
for(int i = start; i <= end; i++) {
if(s[i] > '9' || s[i] < '0'){
return false;
}
num = num*10+(s[i]-'0');
if(num > 255) {
return false;
}
}
return true;
}
vector<string> restoreIpAddresses(string s) {
backstacking(s,0,0);
return ans;
}
};
最近太烦躁了 学习效率还低 晚上听书的时候 听到樊登经常解读论语 来解释人们遇见的一些困惑 其实仔细想想 也挺对
毕竟流传了好几千年 所以这些都是精髓 我们现在遇到的问题 可能我们的祖先早就遇见过了 小时候用脑子背论语
长大后 才明白应该去用心理解论语的真正内涵 人迷茫烦躁的时候 该信些什么呢 我现在相信论语 心平静了 脑子就不胡思乱想了。