总结:
总之一句话,感谢卡哥。每天看卡哥的视频讲解,然后刷题,然后整理到博客上,最后在群链接进行打卡,已经养成了习惯,没有做的话,就感觉少点什么哈哈哈,而且打卡的那一刻真的很有成就感(就是很爽的感觉),当然大部分题我只是完成了一刷,按卡哥说的,还需要再刷至少两遍。其实看的时候还是感觉很爽的,因为卡哥讲的真的很详细,相比之下,其他大部分视频讲的都或多或少简略一些,但是往往省去的那些点,可能也是非常关键的点,如果没有像卡哥一样讲的很详细的话,真的会卡很长时间,哪怕是一道很简单的题,很简单的用法。
看卡哥视频时间太长了,现在看卡哥都感觉格外亲切哈哈哈,希望卡哥能把后面图论之类的内容更快一点哈哈哈。
再次,感谢卡哥(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,这样就会报溢出的错误,要想办法规避这个错误。