剑指offer系列-面试题-20 - 表示数值的字符串 (python)

mac2026-09-03  6

文章目录

1. 题目2. 解题思路3. 代码实现3.1 4. 总结5. 参考文献

1. 题目

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416"及”-1E-16"都表示数值,但"12e"、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。

2. 解题思路

直接看大佬的吧 确定有限自动机DFA

3. 代码实现

3.1

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

4. 总结

伤不起。 班主任:“袁华同学,你怎么了?” 袁华:“这道题太难了,我不会做!o(╥﹏╥)o”

5. 参考文献

[1] 剑指offer丛书 [2] 剑指Offer——名企面试官精讲典型编程题 [3] 确定有限自动机DFA

最新回复(0)