LeetCode 65. Valid Number题目解析-wowAC

Description

Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.


题目复述

给定一个数字字符串,判断该字符串是否可以表示一个数字

题目解析

难点大概在于情况非常多,看到这题想到了词法分析器,经过多次尝试发现此题的字符格式如下[+|-]num.nume[+|-]num,按照这个格式解析就可以,有很多边界条件,比如+., -.,.等,这些都可以用有没有出现数字辨别。

class Solution {
public:
    bool judge(string &s) {
        bool num_appear = false;
        int index = 0, len = s.length();
        //去掉首空格
        while(index<len && s[index]==' ') index++;
        
        if(index<len && (s[index]=='-'||s[index]=='+'))
            index++;
        while(index<len && s[index]>='0' && s[index]<='9') {
            index++;
            num_appear = true;
        }
        if(index<len && s[index]=='.') {
            index++;
            while(index<len && s[index]>='0' && s[index]<='9') {
                index++;
                num_appear = true;
            }
            if(num_appear == false) return false; //"."" ." 等剔除
        }
        if(num_appear == false) return false; //"+." "-."等剔除
        
        num_appear = false;
        if(index<len && s[index]=='e') {
            index++;
            if(index<len && (s[index]=='-'||s[index]=='+'))
                index++;            
            while(index<len && s[index]>='0' && s[index]<='9') {
                index++;
                num_appear = true;
            }
            if(num_appear == false) return false; //e后面必须有字符
        }
        //去掉末尾空格
        while(index<len && s[index]==' ')   index++;
        
        if(index != len) return false;
        return true;
    }
    bool isNumber(string s) {
        return judge(s);
    }
};

发表评论

电子邮件地址不会被公开。 必填项已用*标注