剑指 Offer20-表示数值的字符串C++

还债最后一题

题目描述

在这里插入图片描述
短短的一段描述,根本看不出它的规则是什么,搞得好像所有人都知道这个规则一样,是一道非常难又恶心,又非说是中等实际上很难的中等题。

解法 逐个判断

解法里面一片都是劝退的自动机,总感觉没有必要为了一题这个画一整个状态图(就是很懒)
在这里插入图片描述
所以就去逛了一下评论,终于看到一个非常浅显易懂的,感动哭了。
大佬的思路非常厉害,对于每个字符可能的情况进行正错判断:出现其余情况直接返回false。
对于不同情况以及在代码注释里面写好了
还有一点:C++相对于java而言需要多一个步骤,去掉头和尾的空格需要手写,要注意边界判定

class Solution {
    
    
public:
    bool isNumber(string s) {
    
    
        if(s.size() == 0) return false;
        bool numFlag = false;
        bool dotFlag = false;
        bool eFlag = false;
        int index = 0;
        while(index < s.size() && s[index] == ' ') index ++;
        int begin = index;
        int end = s.size() - 1;
        while(end >= 0 && s[end] == ' ') end --;
        for(; index <= end; index++) {
    
    
            //numFlag判断规则,出现数字就标记
            if(isdigit(s[index])) {
    
    
                numFlag = true;
            }
            //.判定规则,没有出现过. 且必须出现在e的前面
            else if(s[index] == '.' && !dotFlag && !eFlag) {
    
    
                dotFlag = true;
            }
            //e判定规则,没有出现过e 且必须出现过数字
            else if((s[index] == 'e' || s[index] == 'E') && !eFlag && numFlag) {
    
    
                eFlag = true;
                numFlag = false;
            }
            // +/- 判定规则,只能出现在第一位或者在e后面
            else if((s[index] == '+' || s[index] == '-') && (index == begin || s[index - 1] == 'e' || s[index - 1] == 'E' )) {
    
    }
            else {
    
    
                return false;
            }
        }
        //如果字符合法,numflag结束之后必为true
        return numFlag;
    }
};

在这里插入图片描述
这里的numFlag = false是为了防止类似 ‘0e’ 判断为正确:即e后必须有数字出现才是正确的
在这里插入图片描述
时间复杂度O(N)
空间复杂度O(1)
还记得第一题LeetCode的时候,还是一个小萌新,连寻找一个字符都要用数组哈希表各种同样时间复杂度的写法走一遍,转眼已经做完了剑指Offer了,很快啊,每天啪的做一下,春招就要来了。大学期间不管是划水,认认真真冲绩点,还是为了工作专研算法都试过了。希望能够如愿以偿进入大厂。
收获也是真的很多,当初算法与数据结构的题目都是能暴力就暴力,要让现在的自己看肯定觉得就是个傻子吧。如果没有听学长的话刷算法题,真的就是个菜鸡,更不用说去大厂了。
感觉对于CS专业,除了几门面试会考的课确实有意义,其他课都没啥收获。大学的绩点只是能证明自己的学习能力,并不能说明自己的实力。
说来回家这几天也算是很松懈了,一天就慢慢摸一题,和自己当初背六级最后几十个单词一样,但不管怎么说,我也是一件事情能坚持三个月的人,三个月差不多刚好春招了,调整状态继续努力了。
还有很多狠多感慨,总结一下就是:一个菜鸡到了大三做了算法发现了新世界,后悔没有早点做呀。

猜你喜欢

转载自blog.csdn.net/qq_42883222/article/details/113061809