题目: 有效数字
来自智得网
分析
方法一:正则表达式
使用正则表达式匹配,可以直接判断是否为有效数字。以下是正则表达式的解析:
- ^:匹配字符串开头
- [+-]:代表一个+字符或-字符
- ?:前面一个字符可有可无
- \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 == ' '