【面试题20 表示数值的字符串】
难度: 中等
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、“±5”、"-1E-16"及"12e+5.4"都不是。
Leetcode题目对应位置: 面试题20:表示数值的字符串
这道题实际上意思是,包含数值的字符串必须有以下模式:A.BeC 或 A.BEC,其中 A、B、C都不是必要的。A 为整数部分,B 为小数点后的小数部分,C 为 e/E 后的指数部分。
19、20 两道题把我搞懵了,抄作业:
class Solution:
def isNumber(self, s: str) -> bool:
if not s:return False
transTable = [
[1,2,7,-1,-1,0],
[-1,2,7,-1,-1,-1],
[-1,2,3,4,-1,9],
[-1,3,-1,4,-1,9],
[6,5,-1,-1,-1,-1],
[-1,5,-1,-1,-1,9],
[-1,5,-1,-1,-1,-1],
[-1,8,-1,-1,-1,-1],
[-1,8,-1,4,-1,9],
[-1,-1,-1,-1,-1,9]
]
cols = {
"sign":0,
"number":1,
".":2,
"exp":3,
"other":4,
"blank":5
}
def get_col(c):
if c.isdigit():return 'number'
elif c in {'+','-'}:return 'sign'
elif c == '.':return '.'
elif c in {'E','e'}:return 'exp'
elif c == ' ':return 'blank'
else:return 'other'
legal_state = {2,3,5,8,9}
state = 0
for c in s:
state = transTable[state][cols[get_col(c)]]
if state == -1:return False
return True if state in legal_state else False
代码来源:que-ding-you-xian-zi-dong-ji-dfa-by-justyou