解法1:在数值之前可能有一个表示正负的’+‘或者’-’。接下来是若干个0到9的数位表示数值的整数部分(在某些小数里可能没有数值的整数部分)。如果数值是一个小数,那么在小数后面可能会有若干个0到9的数位表示数值的小数部分。如果数值用科学记数法表示,接下来是一个’e’或者’E’,以及紧跟着的一个整数(可以有正负号)表示指数。
判断一个字符串是否符合上述模式时,首先看第一个字符是不是正负号。如果是,在字符串上移动一个字符,继续扫描剩余的字符串中0到9的数位。如果是一个小数,则将遇到小数点。另外,如果是用科学记数法表示的数值,在整数或者小数的后面还有可能遇到’e’或者’E’。
class Solution:
# s字符串
def isNumeric(self, s):
# write code here
if len(s) <= 0:
return False
has_sign = False
has_point = False
has_e = False
for i in range(len(s)):
if s[i] == 'E' or s[i] == 'e':
if has_e:
return False
else:
has_e = True
if i == len(s) - 1:
return False
elif s[i] == '+' or s[i] == '-':
if has_sign:
if s[i-1] != 'e' and s[i-1] !='E':
return False
else:
has_sign = True
if i > 0 and s[i-1] != 'e' and s[i-1] != 'E':
return False
elif s[i] == '.':
if has_point or has_e:
return False
else:
has_point = True
if i >0 and (s[i-1] == 'e' or s[i-1] == 'E'):
return False
else:
if s[i] < '0' or s[i] >'9':
return False
return True