值以上是状态机,我从 http://discuss.leetcode.com/questions/241/valid-number
复制我觉得它不能像“0.10”无效值。 有可能创建一个状态机,可以使值不是结束的“0”无效?
值以上是状态机,我从 http://discuss.leetcode.com/questions/241/valid-number
复制我觉得它不能像“0.10”无效值。 有可能创建一个状态机,可以使值不是结束的“0”无效?
这当然是可能的。为了完全禁止尾随零,直接的方法是将每个终端节点复制到两个:可用1
到9
数字可达的那个和可用0
可到达的那个。之后,相应地调整转场。
在另一方面,你的问题的性质,它看起来像你也会希望禁止数字,如0.
或者其他人。究竟什么是允许的将需要一个严格的定义,虽然搞乱现有的状态机当然是可能的,但可能会发现你的规则实际上比其中使用的规则更简单。在这种情况下,根据你的定义,你可以从零开始构建一个新的状态机。
我认为避免尾随0的最好方法是将数字循环变成2位数状态之间的循环,其中输入0将导致只接受[1-9]数字并将其取回到第一个数字的状态 –
从单一实例归纳,我认为你要拒绝了小数部分0
结束。
要做的那个地方在状态4
附近,这是小数部分的数字被处理的地方,可以以e/E
或space
结尾。
您需要区别于其他数字的0
,并且重复这种状态:4
为nonzero digits
,4°
为0
。同时复制/修改传入转换(1->4
,2->4
和4->4
)。拒绝将通过省略4°->5
和4°->8
并且不允许4°
成为接受状态来实现。
我不完全理解图和问题之间的关系。你的意思是说状态机确实接受输入“0.10”? – Codor
0.10中没有任何“无效”。你为什么要使它无效? –