Leetcode 65. 有效数字

news/2024/9/23 13:25:21

1.题目基本信息

1.1.题目描述

给定一个字符串 s ,返回 s 是否是一个 有效数字。

例如,下面的都是有效数字:”2″, “0089”, “-0.1”, “+3.14”, “4.”, “-.9”, “2e10”, “-90E3”, “3e+7”, “+6e-1”, “53.5e93”, “-123.456e789″,而接下来的不是:”abc”, “1a”, “1e”, “e3”, “99e2.5”, “–6”, “-+3”, “95a54e53″。

一般的,一个 有效数字 可以用以下的规则之一定义:

  • 一个 整数 后面跟着一个 可选指数。
  • 一个 十进制数 后面跟着一个 可选指数。
    一个 整数 定义为一个 可选符号 ‘-‘ 或 ‘+’ 后面跟着 数字。

一个 十进制数 定义为一个 可选符号 ‘-‘ 或 ‘+’ 后面跟着下述规则:

  • 数字 后跟着一个 小数点 .。
  • 数字 后跟着一个 小数点 . 再跟着 数位。
  • 一个 小数点 . 后跟着 数位。

指数 定义为指数符号 ‘e’ 或 ‘E’,后面跟着一个 整数。

数字 定义为一个或多个数位。

1.2.题目地址

https://leetcode.cn/problems/valid-number/description

2.解题方法

2.1.解题思路

状态机; 关键: 状态机的设计,即状态的定义+状态的转移函数

2.2.解题步骤

第一步,进行状态定义,并设计好状态转移图(这是最难也是最重要的一步,这步错了或者设计不合理,后面也就barbecue了)

第二步,初始化状态为INIT

第三步,进行遍历。根据当前状态+遍历的当前条件,进行当前状态的转移更新

3.解题代码

Python代码

class Solution:# 状态机; 关键: 状态的定义+状态的转移函数def isNumber(self, s: str) -> bool:# 第一步,进行状态定义,并设计好状态转移图(这是最难也是最重要的一步,这步错了或者设计不合理,后面也就barbecue了)# states=[#     "STATE_INIT",   # 初始状态#     "STATE_INT_SIGN", # 整数符号状态#     "STATE_INT",  # 整数状态#     "STATE_POINT",    # 左右整数的小数点状态#     "STATE_POINT_WITHOUT_LEFT_INT",   # 左无整数的小数点状态#     "STATE_FRACTION", # 小数状态#     "STATE_EXP",  # 指数状态#     "STATE_EXP_SIGN", # 指数后面的数字的符号状态#     "STATE_EXP_NUM",  # 指数的数字状态#     "STATE_END"   # 结束状态# ]# 第二步,初始化状态为INITcurrentState="STATE_INIT"# 第三步,进行遍历。根据当前状态+遍历的当前条件,进行当前状态的转移更新for ch in s:if currentState=="STATE_INIT":if ord("0")<=ord(ch)<=ord("9"):currentState="STATE_INT"elif ch==".":currentState="STATE_POINT_WITHOUT_LEFT_INT"elif ch=="+" or ch=="-":currentState="STATE_INT_SIGN"else:return Falseelif currentState=="STATE_INT_SIGN":if ord("0")<=ord(ch)<=ord("9"):currentState="STATE_INT"elif ch==".":currentState="STATE_POINT_WITHOUT_LEFT_INT"else:return Falseelif currentState=="STATE_INT":if ch.lower()=="e":currentState="STATE_EXP"elif ch==".":currentState="STATE_POINT"elif ord("0")<=ord(ch)<=ord("9"):currentState="STATE_INT"else:return Falseelif currentState=="STATE_POINT":if ord("0")<=ord(ch)<=ord("9"):currentState="STATE_FRACTION"elif ch.lower()=="e":currentState="STATE_EXP"else:return Falseelif currentState=="STATE_POINT_WITHOUT_LEFT_INT":if ord("0")<=ord(ch)<=ord("9"):currentState="STATE_FRACTION"else:return Falseelif currentState=="STATE_FRACTION":if ord("0")<=ord(ch)<=ord("9"):currentState="STATE_FRACTION"elif ch.lower()=="e":currentState="STATE_EXP"else:return Falseelif currentState=="STATE_EXP":if ch=="+" or ch=="-":currentState="STATE_EXP_SIGN"elif ord("0")<=ord(ch)<=ord("9"):currentState="STATE_EXP_NUM"else:return Falseelif currentState=="STATE_EXP_SIGN":if ord("0")<=ord(ch)<=ord("9"):currentState="STATE_EXP_NUM"else:return Falseelif currentState=="STATE_EXP_NUM":if ord("0")<=ord(ch)<=ord("9"):currentState="STATE_EXP_NUM"else:return Falseelse:return Falseif currentState in ["STATE_INT","STATE_FRACTION","STATE_EXP_NUM","STATE_POINT"]:currentState="STATE_END"# print(currentState)return currentState=="STATE_END"

4.执行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/63738.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

结对项目——实现一个自动生成小学四则运算题目的命令行程序

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里 结对项目 - 作业 - 计科22级34班 - 班级博客 - 博客园 (cnblogs.com)这个作业的目标 结对项目——实现一个自动生成小学四则运算题目的命令行程序成员1 陈奕奕 3222004552成员2 林闰…

任务三:pdf转换器应用

本次添加水印我使用的lightPDF网页进行水印的添加工作https://lightpdf.com/ 1.首先要先注册账号 2.可以使用浏览器对网页进行翻译 3.在“pdf工具栏”中找到第三列“编辑pdf”的位置,选择“水印pdf” 4.把需要添加水印的文件添加到网页中 5.对水印的大小,透明度,颜色,内容进…

wordpress网站维护教程:不能上传文件,数据库报错的解决方法

当WordPress网站遇到不能上传文件或数据库报错的问题时,这可能会影响网站的正常使用。下面分别针对这两种情况提供一些可能的解决方法。 不能上传文件权限问题:检查上传文件的目标目录权限是否正确。通常,WordPress的上传目录(默认为/wp-content/uploads/)应该具有可写的权…

人工智能第三次课程

第三次课程学习了思维导图的制作 分享了多个工具 我下载了亿图 选择的主题是田忌赛马 我是以面向学生为主体制作的田忌赛马 包括作者 主题 故事要素 取胜原因四个部分 可以清晰的帮助学生逐步理解所学内容

海报制作:校园安全

我所选的主题是校园安全教育,校园安全是当下每一个校园都应该注重的事情。海报的制作更贴合于校园学习氛围,以书籍为右侧的部分,在黑板上写下主题题目,更贴合于课堂。花朵点缀,附加儿童安全歌读起来朗朗上口,让学生们的印象更深刻。下方学生与教师形象与日常课堂相仿,学…

为什么我的 PHP 数据库连接失败?

PHP 数据库连接失败可能有多种原因,以下是一些常见的原因及其解决方法:数据库凭证错误:检查数据库连接时使用的用户名和密码是否正确。如果数据库的凭证发生了变化,请确保在 PHP 中也进行了更新。数据库服务器未运行:确认数据库服务器(如 MySQL, PostgreSQL, SQLite 等)…

数据库连接失败的原因及解决方法

数据库连接失败是一个常见的问题,它可能由多个因素引起。以下是一些常见的原因及相应的解决方法: 原因数据库服务未启动:如果数据库服务没有运行,任何试图连接它的应用都会失败。连接参数错误:包括但不限于数据库服务器地址、端口号、用户名或密码错误。网络问题:如果数据…

9.23 海报+PDF水印运用

任务2: 海报以宣传校植物研学社为主题,吸引天华小学学生积极报名加入校植物研学社,与学校聘请特邀的植物学专家、生物老师、同学共度一场植物奇遇记,在植物的世界中展开探索与冒险。 在每周一次的研学社活动中,教师会提供各种各样的植物标本与实物,学生可以在专家、教师的…