题目: 有效数字

来自智得网
跳转至: 导航、​ 搜索

分析

方法一:正则表达式

使用正则表达式匹配,可以直接判断是否为有效数字。以下是正则表达式的解析:

  • ^:匹配字符串开头
  • [+-]:代表一个+字符或-字符
  • ?:前面一个字符可有可无
  • \d:一个数字
  • +:前面一个字符的一个或多个
  • (?:.\d*):一个小数,.后跟零个或多个数字
  • (?:\d+.):一个小数,以一个或多个数字开头
  • (?:\d+.\d*):一个小数,以一个或多个数字开头,后跟一个小数部分
  • (?:[eE][+-]?\d+):科学计数法表示的数字,e或E前面有一个或多个数字,且e或E后面可能有+或-号

以下是使用正则表达式实现的Python代码:

import re

class Solution:
def isNumber(self, s: str) -> bool:
return bool(re.match('^[+-]?(?:\d+.?|.\d+)\d*(?:[eE][+-]?\d+)?$', s.strip()))

方法二:有限状态自动机 以下是使用有限状态自动机实现的Python代码:

class Solution:
def isNumber(self, s: str) -> bool:
state = [
{'blank': 0, 'sign': 1, 'digit': 2, '.': 3},
{'digit': 2, '.': 3},
{'digit': 2, '.': 4, 'e': 5, 'blank': 8},
{'digit': 4},
{'digit': 4, 'e': 5, 'blank': 8},
{'sign': 6, 'digit': 7},
{'digit': 7},
{'digit': 7, 'blank': 8},
{'blank': 8}
]
cur_state = 0
for c in s:
if c.isdigit():
c = 'digit'
elif c in ['+', '-']:
c = 'sign'
elif c == ' '