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

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

这种大模拟题真的就是磨练心态的,太麻烦了,wa得没脾气。
总结起来就是一定要有数字,小数点前必须有数字并且小数点前面不能有e,e前面必须有数字且前面不能有e,有e之后为了有指数,需要重置\(numCnt\),符号必须出现在第一位或者在e后面。

class Solution {
    public boolean isNumber(String s) {
        if(s == null || s.length() == 0) {
            return false;
        }
        s = s.trim();
        int eCnt = 0, numCnt = 0, dotCnt = 0, symbolCnt = 0;
        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(c >= '0' && c <= '9') {
                // 出现数字直接加
                numCnt++;
            } else if(c == '.') {
                // 出现小数点,需要之前没有出现过.和e
                if(dotCnt != 0 || eCnt != 0) {
                    return false;
                } else {
                    dotCnt++;
                }
            } else if(c == 'e' || c == 'E') {
                // 出现了e,需要之前出现了数字且没有出现过e
                if(numCnt == 0 || eCnt != 0) {
                    return false;
                } else {
                    eCnt++;
                    numCnt = 0;
                }
            } else if(c == '+' || c == '-') {
                // 符号要出现在第一位
                if(i != 0 && (s.charAt(i - 1) != 'e' && s.charAt(i - 1) != 'E')) {
                    return false;
                } else {
                    symbolCnt++;
                }
            } else {
                return false;
            }
        }
        return numCnt > 0;

    }
}
上一篇:剑指 Offer 66. 构建乘积数组


下一篇:2020我的头条面试之旅,面试官不会的我都会完爆面试官,轻松拿下Offer年薪70w