#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param str string字符串
# @return bool布尔型
#方法一:排除法
class Solution:
def isNumeric(self , str ):
# write code here
point=False
e=False
leop=False
reop=False
lens=len(str)
eindex=lens
if 'e' in str :
eindex=str.index('e')
if 'E' in str:
eindex=str.index('E')
if lens==1:
if str[0]<'0' or str[0]>'9':
return False
for i in range(lens):
if str[i]=='.':
if point or i>eindex:
return False
point=True
elif str[i]=='e' or str[i]=='E':
if e or i==0 or i==lens-1:
return False
e=True
eindex=i
elif str[i]=='+' or str[i]=='-':
if i<eindex:
if str[i]==str[:eindex]:
return False
if leop or i!=0:
return False
leop=True
else:
if str[i]==str[eindex+1:]:
return False
if reop or i!=eindex+1:
return False
reop=True
elif str[i]>='0'and str[i]<='9':
continue
else:
return False
return True方法二:穷举法
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param str string字符串
# @return bool布尔型
#
class Solution:
def isNumeric(self , str ):
# write code here
res=[
{'s':1, 'd':2, '.':3}, ##0 开头可放置的字符
{'.':3, 'd':2 }, ##1 符号开头,后面可放置的字符
{'d':2, '.':4,'e':5}, ##2 数字后面可放置的字符
{'d':4}, ##3 点开头后面可放置的字符
{'d':4,'e':5}, ##4 数字+点号,后面可以放置的字符
{'s':6,'d':7}, ##5 e后面可放置的字符
{'d':7}, ##6 e+符号,不能以符号结尾,后面可以放置的字符
{'d':7} ##7 以数字结尾
]
p=0
for i in str:
if i=='+' or i=='-':
t= 's'
elif i in 'eE':
t='e'
elif i=='.':
t='.'
elif i>='0' and i<='9':
t='d'
else:
t='?'
if t not in res[p]:
return False
p=res[p][t]
return p in [2,4,7]
京公网安备 11010502036488号