思路:
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;
}
};
Every step of barefoot running deserves to be recorded