LeetCode #65 - Valid Number

题目描述:

Validate if a given string can be interpreted as a decimal number.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
" -90e3   " => true
" 1e" => false
"e3" => false
" 6e-1" => true
" 99e2.5 " => false
"53.5e93" => true
" --6 " => false
"-+3" => false
"95a54e53" => false

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one. However, here is a list of characters that can be in a valid decimal number:

• Numbers 0-9

• Exponent - "e"

• Positive/negative sign - "+"/"-"

• Decimal point - "."

Of course, the context of these characters also matters in the input.

class Solution {
public:
    bool isNumber(string s) {
        int begin=0;
        int end=s.size()-1;
        while(s[begin]==' ') begin++;
        while(s[end]==' ') end--;
        s=s.substr(begin,end-begin+1);
        
        if(s.size()==0) return false;
        if(s[0]=='-'||s[0]=='+') s=s.substr(1);
        if(s[0]=='.'&&s.size()==1) return false; //"-."不合法,先要除去加减号再判断
        
        int dot_count=0;
        int e_count=0;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]>='0'&&s[i]<='9') continue;
            else if(s[i]=='.')
            {
                dot_count++;
                if(dot_count>1) return false; //数字中最多一个.
                if(e_count>0) return false; //如果数字中同时包含.和e,那么e必须在.之后,"e2.5"不合法
            }
            else if(s[i]=='e'||s[i]=='E')
            {
                e_count++;
                if(e_count>1) return false; //数字中最多一个e
                if(i==0||i==s.size()-1) return false; //开头或结尾为e不合法
                if(s[i-1]=='.'&&i==1) return false; //".e1"不合法,但是"2.e3"合法
                if(s[i+1]=='+'||s[i+1]=='-')
                {
                    if(i+1==s.size()-1) return false; //当e和加减号是数字的最后两位,"e+"不合法
                    i++; //跳过下一个加号或减号,因为除去数字开头,加减号只能出现在e之后
                }
            }
            else return false;
        }
        return true;
    }
};

猜你喜欢

转载自blog.csdn.net/LawFile/article/details/86656036