总结:

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

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

再次,感谢卡哥(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,这样就会报溢出的错误,要想办法规避这个错误。

04-16 23:12