65. 有效数字

方法一:作弊,看下代码细节
try的使用方法:
try:
正常的操作
......................
except:
发生异常,执行这块代码
......................
else:
如果没有异常执行这块代码
代码:
注意下面是float()这个函数将字符串转换为小数
class Solution:
def isNumber(self, s: str) -> bool:
try:
num = float(s)
return True
except:
return False
方法二:有限状态机
难点是正确画出状态机:
这个图不太对。其中状态3,5,7后面还要加个状态8,转换的条件是字符为空格。

看下代码注释的地方,看下state是怎么定义的
class Solution:
def isNumber(self, s: str) -> bool:
# 这个列表每一个代表一个状态
# 每行的字典表示该状态下的状态转换关系
state = [
{'blank':0, 'digital':6, 'sign':1, 'dot':2},
{'digital':6, 'dot':2},
{'digital':3},
{'digital':3, 'e':4, 'blank':8},
{'digital':5, 'sign':7},
{'digital':5, 'blank':8},
{'digital':6, 'dot':3, 'e':4, 'blank':8},
{'digital':5},
{'blank':8}
]
curstate = 0
for c in s:
# 注意这里的c.isdigit(),这是字符串的一个方法,判断是否全是数字
if c.isdigit():
temp = 'digital'
elif c==' ':
temp = 'blank'
elif c=='.':
temp = 'dot'
# in 可以直接再字符串上使用
elif c in '+-':
temp = 'sign'
elif c=='e':
temp = 'e'
else:
return False
if temp in state[curstate]:
curstate = state[curstate][temp]
else:
return False
if curstate in [3,5,6,8]:
return True
else:
return False
关键词:try...except...,有限状态转换机,