热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

leetcode每日一题65.有效数字

DFA法思路:确定的有穷自动机,相关参考8.字符串转换整数(atoi)遍历字符串,遇到的字符总共有6种。(空格,正负号,数字,小数点,字符e,无效字符)可能出现的状态有11种:st

技术分享图片

DFA法

思路:

确定的有穷自动机,相关参考8. 字符串转换整数 (atoi)

 

遍历字符串,遇到的字符总共有6种。(空格,正负号,数字,小数点,字符e,无效字符)

可能出现的状态有11种:

start:初始状态

signed:符号态

integer:整数态

sDot:特殊的初始小数点态(小数点之前为符号或空格)

dot:小数点态(小数之前为整数)

decimals:小数态

e:指数符号态

eSigned:指数正负号态

index:指数态

eSpace:尾部空格态

end:无效截止态

各种状态在自己状态下遇到6种字符要更新的状态如下图所示:

技术分享图片

每种状态下代表之前遍历过的字符是否能转为数字:

start:False

signed:False

integer:True

sDot:False

dot:True

decimals:True

e:False

eSigned:False

index:True

eSpace:True

end:False

代码:


class Automaton:
def __init__(self):
self.state
= start
self.isNum
= False
self.table
= {
start: [start,signed,integer,sDot, end,end],
signed: [end,end,integer,sDot,end, end],
integer: [eSpace,end,integer,dot,e,end],
sDot:[end,end,decimals,end,end,end],
dot: [eSpace,end,decimals,end,e,end],
decimals: [eSpace,end,decimals,end,e,end],
e: [end,eSigned,index,end,end,end],
eSigned: [end,end,index,end,end,end],
index: [eSpace,end,index,end,end,end],
eSpace: [eSpace,end,end,end,end,end]
}
def get_col(self, c):
if c.isspace():
return 0
if c == + or c == -:
return 1
if c.isdigit():
return 2
if c == .:
return 3
if c == e:
return 4
return 5
def get(self, c):
self.state
= self.table[self.state][self.get_col(c)]
if self.state == start:
self.isNum
= False
elif self.state == signed:
self.isNum
= False
elif self.state == integer:
self.isNum
= True
elif self.state == sDot:
self.isNum
= False
elif self.state == dot:
self.isNum
= True
elif self.state == decimals:
self.isNum
= True
elif self.state == e:
self.isNum
= False
elif self.state == eSigned:
self.isNum
= False
elif self.state == index:
self.isNum
= True
elif self.state == end:
self.isNum
= False
elif self.state == eSpace:
self.isNum
= True
class Solution:
def isNumber(self, s: str) -> bool:
automaton
= Automaton()
for c in s:
automaton.get(c)
if automaton.state == "end":
break
return automaton.isNum

 


推荐阅读
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本文介绍如何使用 Python 计算两个时间戳之间的时间差,并将其转换为毫秒。示例代码展示了如何通过 `time` 和 `datetime` 模块实现这一功能。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • selenium通过JS语法操作页面元素
    做过web测试的小伙伴们都知道,web元素现在很多是JS写的,那么既然是JS写的,可以通过JS语言去操作页面,来帮助我们操作一些selenium不能覆盖的功能。问题来了我们能否通过 ... [详细]
  • 本文介绍了用户界面(User Interface, UI)的基本概念,以及在iOS应用程序中UIView及其子类的重要性和使用方式。文章详细探讨了UIView如何作为用户交互的核心组件,以及它与其他UI控件和业务逻辑的关系。 ... [详细]
  • 本文概述了在GNU/Linux系统中,动态库在链接和运行阶段的搜索路径及其指定方法,包括通过编译时参数、环境变量及系统配置文件等方式来控制动态库的查找路径。 ... [详细]
  • 使用REM和媒体查询实现响应式布局
    本文介绍如何利用REM单位和媒体查询(Media Queries)来创建适应不同屏幕尺寸的网页布局。通过具体示例,展示在不同屏幕宽度下如何调整页面元素的样式。 ... [详细]
  • 本文详细对比了HashMap和HashTable在多线程环境下的安全性、对null值的支持、性能表现以及方法同步等方面的特点,帮助开发者根据具体需求选择合适的数据结构。 ... [详细]
  • 神策数据分析基础
    本文介绍了基于用户行为的数据分析方法,包括业务问题的提出与定义、具体行为的识别及统计分析流程。同时,详细阐述了如何利用事件模型(Event Model)来描述用户行为,以及在实际应用中的案例分析。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • 本文列举了构建和运行 Struts2 应用程序所需的核心 JAR 文件,包括文件上传、日志记录、模板引擎等关键组件。 ... [详细]
  • 本文介绍了一个来自AIZU ONLINE JUDGE平台的问题,即清洁机器人2.0。该问题来源于某次编程竞赛,涉及复杂的算法逻辑与实现技巧。 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • SPFA算法详解与应用
    当图中包含负权边时,传统的最短路径算法如Dijkstra不再适用,而Bellman-Ford算法虽然能解决问题,但其时间复杂度过高。SPFA算法作为一种改进的Bellman-Ford算法,能够在多数情况下提供更高效的解决方案。本文将详细介绍SPFA算法的原理、实现步骤及其应用场景。 ... [详细]
author-avatar
手机用户2502852661
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有