DFA Parse Integer
这题看一眼就会发现要考虑的各种奇葩 case 实在是太多了。。。对于这类需要 parse 的同时考虑 N 多种不同状态的字符串处理问题,就老老实实用 DFA (Deterministic Finite Automata) 吧,要不会被折磨疯的。
记得先把输入字符 trim 一下,免得前后空格不好处理。
状态列表,每一个独立状态用一个 char 表示;
s : 还未看到 + / - 号的起始状态
S : 已看到符号的起始状态
N : 读到数字了,还没遇到 '.' 或 'e'
d : 首次碰到 '.',后面还没有遇到数字
D : 已碰到 '.' 并且后面有数字
e : 首次碰到 'e',后面还没有数字
E : 已碰到 'e' 并且后面有数字
F : 违法状态,一定为 false;
DFA 结构如图~ 所有没画出来的边都是 'F',以双圈结束(小写字母)的也都是 'F'.

一个意思,就是 DFA 结构稍微变了点。
检查 overflow 简便方法:
next = cur * 10 + newVal;
if(next / 10 != cur), overflow.
刷题刷到现在我才深切体会到当初 bloomberg 面试题是多么的傻逼。。
Last updated
Was this helpful?