> 文章列表 > 代码随想录总结 剑指offer 20.表示数值的字符串 面试题67. 把字符串转换成整数

代码随想录总结 剑指offer 20.表示数值的字符串 面试题67. 把字符串转换成整数

代码随想录总结 剑指offer 20.表示数值的字符串 面试题67. 把字符串转换成整数

总结:

总之一句话,感谢卡哥。每天看卡哥的视频讲解,然后刷题,然后整理到博客上,最后在群链接进行打卡,已经养成了习惯,没有做的话,就感觉少点什么哈哈哈,而且打卡的那一刻真的很有成就感(就是很爽的感觉),当然大部分题我只是完成了一刷,按卡哥说的,还需要再刷至少两遍。其实看的时候还是感觉很爽的,因为卡哥讲的真的很详细,相比之下,其他大部分视频讲的都或多或少简略一些,但是往往省去的那些点,可能也是非常关键的点,如果没有像卡哥一样讲的很详细的话,真的会卡很长时间,哪怕是一道很简单的题,很简单的用法。

看卡哥视频时间太长了,现在看卡哥都感觉格外亲切哈哈哈,希望卡哥能把后面图论之类的内容更快一点哈哈哈。

再次,感谢卡哥(B站:代码随想录,讲的是我见过最好的,没有之一)

剑指 Offer 20. 表示数值的字符串

题目链接

这道题主要参考B站视频

注意需要先去除所有开头的空格和末尾的空格(字符串中间有空格没关系)。

class Solution {
public:bool isNumber(string s) {if(s.size()==0) return false;//s.erase(remove_if(s.begin(),s.end(),isspace),s.end());//虽然去除所有空格不对,但这个写法为啥不行//s.erase(remove_if(s.begin(), s.end(), ::isspace), s.end());s.erase(0,s.find_first_not_of(' '));s.erase(s.find_last_not_of(' ')+1);int k=0;if(s[k]=='+'||s[k]=='-'){k++;if(s[k]=='+'||s[k]=='-'){return false;}}if(k==s.size()){return false;}int dot=0,e=0,num=0;while(k<s.size()){if(s[k]>='0'&&s[k]<='9'){k++;num++;}else if(s[k]=='.'){if(dot>0||e>0){return false;}k++;dot++;if(num==0&&k==s.size()){return false;}}else if(s[k]=='e'||s[k]=='E'){if(num==0||e>0){return false;}k++;e++;if(s[k]=='+'||s[k]=='-'){k++;if(s[k]=='+'||s[k]=='-'){return false;}}if(k==s.size()){return false;}}else{return false;}}return true;}
};

这道题的收获主要还是知道了了解了find_first_not_of()函数和find_last_not_of()函数的应用。

只出现一个.也不对,比B站视频讲解情况多一点。

面试题67. 把字符串转换成整数

题目链接

本题思路主要参考B站视频,当然要考虑的情况稍微多一点。

class Solution {
public:int strToInt(string str) {if(str.size()==0) return 0;int k=0;while(k<str.size()&&str[k]==' '){k++;}if(k==str.size()||!((str[k]>='0'&&str[k]<='9')||(str[k]=='+'||str[k]=='-'))) return 0;long long num=0;int sign=1;if(str[k]=='+'){k++;sign=1;}else if(str[k]=='-'){k++;sign=-1;} if(!(str[k]>='0'&&str[k]<='9')) return 0;while(k<str.size()){if(str[k]>='0'&&str[k]<='9'){num=num*10+str[k]-'0';//说到字符串转数字就应该想到这个,标准写法if(sign==1&&num>=INT_MAX){return INT_MAX;}else if(sign==-1&&(-num)<=INT_MIN) return INT_MIN;k++;}else{break;}}num*=sign;//不用判断,直接乘一下就行了return num;}
};

错因:不能写INT_MAX+1,这样就会报溢出的错误,要想办法规避这个错误。