思路:

1.先去除首行和行尾空格

2.行首如果有正负号直接忽略

3.如果字符串为空或者只有一个‘.’,则不是合法数

4.循环真个字符串,去掉一下几种情况

 ‘.’或者‘e’多于1个

‘.’在e后面出现

e后面或者前面为空,或者e前面紧跟着‘.’

e后面紧跟着正负号,但是正负号后面为空

5.其他情况都合法

代码:

class Solution {
public:
    bool isNumber(string s) {
        //去除字符串前后空格
        int i=0;
        while(i<s.size() && s[i]==' ') i++;
        int j=s.size()-1;
        while(j>=0 && s[j]==' ') j--;
        if(i>j) return false;
        s=s.substr(i,j-i+1);

        //判断首行如果有一个正负号直接忽略
        if(s[0]=='-'||s[0]=='+') s=s.substr(1);
        if(s.empty() || s[0]=='.' && s.size()==1) return false;

        //判断“.”和‘e’的情况

        int dot=0,e=0;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]>='0' && s[i]<='9');
            else if(s[i]=='.')
            {
                dot++;
                if(e || dot>1) return false;
            }
            else if(s[i]=='e' || s[i]=='E')
            {
                e++;
                if(i+1==s.size() || !i || e>1 || i==1&&s[0]=='.') return false;
                if(s[i+1]=='+' || s[i+1]=='-')
                {
                    if(i+2==s.size()) return false;
                    i++;
                }
            }
            else return false;
        }
        return true;
    }
};