Leetcode Day7 2
剑指 Offer 20. 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
数值(按顺序)可以分成以下几个部分:
若干空格
一个 小数 或者 整数
(可选)一个
'e'
或'E'
,后面跟着一个 整数若干空格
小数(按顺序)可以分成以下几个部分:
(可选)一个符号字符(
'+'
或'-'
)下述格式之一:
至少一位数字,后面跟着一个点
'.'
至少一位数字,后面跟着一个点
'.'
,后面再跟着至少一位数字一个点
'.'
,后面跟着至少一位数字
整数(按顺序)可以分成以下几个部分:
(可选)一个符号字符(
'+'
或'-'
)至少一位数字
部分数值列举如下:
["+100", "5e2", "-123", "3.1416", "-1E-16", "0123"]
部分非数值列举如下:
["12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"]
这道题自动机其实就是穷举法吧。。所以我直接穷举了
边界条件太复杂了,错了好几次……

总之最后还是过了,建议s1这种数组直接替换吧,好容易写错。
class Solution:
def isNumber(self, s: str) -> bool:
s1=s.strip()
if not s1:return False #如果只有空格,返回错误
i=0 #计数
isE=False
isDot=False
isNum=False
while i<len(s1):
if '0'<=s1[i]<='9':
i+=1
isNum=True
elif s1[i]=='e' or s1[i]=='E':
if isNum==False or isE==True:return False
if i==len(s1)-1:
return False
i+=1
isE=True
elif s1[i]=='+' or s1[i]=='-':
if i!=len(s1)-1 and (i==0 or s[i-1]=='e'or s[i-1]=='E'):
i+=1
else:
return False
elif s1[i]=='.':
if i==len(s1)-1:return False
if isE==True or isDot==True:return False
if '0'<=s1[i-1]<='9' or '0'<=s1[i+1]<='9':
i+=1
isDot=True
else:
return False
return True
