处理浮点数的状态机
2015-08-13 23:26
169 查看
这个问题来自于 leetcode 065:
[+-]?(([0-9]+\.?) | (\.[0-9]))[0-9]*([eE][+-]?[0-9]+)?
我自己使用 dot 画了一个状态机出来:
如果编写代码来模拟这个状态机,可以拆分为 “eE" 前后两部分分开处理; “eE” 前面的部分,还可以拆成 “.” 前后两部分(如果有点)来编写。
这道题目在 leetcode 上难度为 Hard,可以看出来这种不起眼的小细节,更能考验基本功。
------------------
由于字数限制,附上我话这个状态机使用的源码:
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="$"] }
相关文章推荐
- FrameSize、WinSize、VisibleSize、VisibleOrigin概念理解
- 十个让你成为优秀程序员的有效方法
- 使用行列式公式求多边形面积
- 类初始化与类对象初始化
- Windows 商店应用程序异步执行task和调整task优先级
- Android中Activity, View,Window,DecorView之间的关系
- 《Objective-C基础教程》第10章 对象初始化
- 如何用OpenCV自带的adaboost程序训练并检测目标
- Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)
- JDK容器 Vector源码剖析
- LeetCode104:Maximum Depth of Binary Tree
- 字符设备驱动程序的使用
- mysql中innodb和myisam的区别
- 【Struts2学习笔记-8】Struts2实现json数据的返回
- 算法题: 锤子剪刀布
- 2、Redis集群的调用
- Unity Mesh
- I-539 表格
- 【java开发】数组基本学习
- 黑马程序员———API之StringBuffer、Integer和Character