您的位置:首页 > 其它

处理浮点数的状态机

2015-08-13 23:26 169 查看
这个问题来自于 leetcode 065:

Valid Number

如果用正则表达式来写一个浮点数的解析,大概是这样的:


[+-]?(([0-9]+\.?) | (\.[0-9]))[0-9]*([eE][+-]?[0-9]+)?


我自己使用 dot 画了一个状态机出来:



如果编写代码来模拟这个状态机,可以拆分为 “eE" 前后两部分分开处理; “eE” 前面的部分,还可以拆成 “.” 前后两部分(如果有点)来编写。

这道题目在 leetcode 上难度为 Hard,可以看出来这种不起眼的小细节,更能考验基本功。

------------------

由于字数限制,附上我话这个状态机使用的源码:

digraph {
graph [fontname = "Microsoft YaHei",fontsize=16 ranksep=1.0 splines=1 overlap=false size="16, 16" compound=true]
edge [fontname = "Microsoft YaHei",fontsize=16]
node [fontname = "Microsoft YaHei",fontsize=16 weight=2 rank=same width=1 rankdir=LR]

p0[label="Start"]
p2[label="Initial-Check"]
p4[label="Dot-First"]
p5[label="After-E"]
p6[label="After-E-Mark"]
p7[label="Almost-Done"]
p8[label="End"]
p9[label="Sign-Mark"]
pa[label="After-Dot"]

p0 -> p9[label="[+-]"]
p0 -> p9[label="blank-string"]

p9 -> p4[label="``.''"]

p9 -> p2[label="[0-9]"]

p2 -> p2[label="[0-9]"]
p2 -> pa[label="``.''"]
p2 -> pa[label="blank-string"]
p4 -> pa[label="[0-9]"]
pa -> pa[label="[0-9]"]
pa -> p8[label="$"]
pa -> p5[label="[Ee]"]
p5 -> p6[label="[+-]"]
p5 -> p6[label="blank-string"]
p6 -> p7[label="[0-9]"]
p7 -> p7[label="[0-9]"]
p7 -> p8[label="$"]
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: