Leetcode Valid Number
最近做了一道很有意思的题目,需要判断一个输入字符串是不是一个合法的「科学计数法」表示。原题在这里。当然解法可能有很多,我选择了使用状态机来描述。因为之前看了许多关于词法分析的文章和书,一直没有机会实践,写完这道题目,算是对状态机有了一个亲身实践。
很坑,因为不知道具体什么样的输入才满足 Leetcode 和「合法」,所以画了好几张流程图都不满足,最终参考网上资料,发现原来是对输入「e」的状态转移处理有问题,不过好说歹说算是画出来了,换来了优雅的「Accepted」。
直接上我的草图好了:
简单解释一下:
- d 表示输入为 digit
- . 表示输入为 dot
- s 表示输入为 space
- e 表示输入为 e 或者 E
- +, - 表示输入为 sig
最终 Python 实现代码放在 Github
最开始是写了好多 if-else 的,后来 debug 起来太复杂,转成查表进行状态转移了。表驱动大法好。
comments powered by Disqus