LeetCode题练习与总结:有效数字--65

一、题目描述

有效数字(按顺序)可以分成以下几个部分:

1. 一个 小数 或者 整数

2. (可选)一个 'e''E' ,后面跟着一个 整数

小数(按顺序)可以分成以下几个部分:

1. (可选)一个符号字符('+''-'

2. 下述格式之一:

  1. 至少一位数字,后面跟着一个点 '.'
  2. 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
  3. 一个点 '.' ,后面跟着至少一位数字

整数(按顺序)可以分成以下几个部分:

1. (可选)一个符号字符('+''-'

2. 至少一位数字

部分有效数字列举如下:["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"]

给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true

示例 1:

输入:s = "0"
输出:true

示例 2:

输入:s = "e"
输出:false

示例 3:

输入:s = "."
输出:false

提示:

  • 1 <= s.length <= 20
  • s 仅含英文字母(大写和小写),数字(0-9),加号 '+' ,减号 '-' ,或者点 '.'

二、解题思路

  1. 首先,我们需要定义一些标志来记录字符串中的不同部分,例如是否有过数字出现、是否有小数点、是否有指数部分等。
  2. 遍历字符串,根据当前字符的类型,更新相应的标志,并且根据标志的状态来判断字符串是否符合有效数字的规则。
  3. 对于整数部分,我们需要至少有一个数字。
  4. 对于小数部分,我们需要有一个数字后跟一个小数点,并且点后至少有一个数字。
  5. 对于指数部分,我们需要有 'e' 或 'E' 后面跟随至少一个数字,并且整个指数部分是可选的。
  6. 在遍历过程中,我们需要处理一些特殊情况,例如连续的数字、点号等。

三、具体代码

public class Solution {public boolean isNumber(String s) {// 定义一些标志位boolean hasDigit = false; // 是否有数字出现boolean hasDecimal = false; // 是否有小数点boolean hasExp = false; // 是否有指数部分// 遍历字符串for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);if (Character.isDigit(c)) {// 如果是数字,重置hasExp为false,并且至少有一个数字出现hasDigit = true;hasExp = false;} else if (c == '.') {// 如果是小数点,需要之前有数字,并且之后还需要有数字if (!hasDigit || hasDecimal) {return false; // 之前没有数字或者已经有小数点了,不是有效数字}hasDecimal = true;} else if (c == 'e' || c == 'E') {// 如果是指数部分,需要之前有数字,并且之后都是数字if (!hasDigit || hasExp) {return false; // 之前没有数字或者已经有指数部分了,不是有效数字}hasExp = true;hasDigit = false; // 重置hasDigit为false,因为我们需要重新验证后面的数字} else if (c == '+' || c == '-') {// 符号只允许出现在数字之前if (i != 0 || (i == 0 && !hasDigit)) {return false; // 符号出现在中间或者开头但没有数字,不是有效数字}} else {// 其他字符都不是有效数字的一部分return false;}}// 根据标志位来判断是否是有效数字return hasDigit && (!hasDecimal || hasExp);}
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 该算法的主要操作是一个遍历字符串的过程,遍历的复杂度是 O(n),其中 n 是字符串 s 的长度。
  • 在遍历过程中,所做的操作(如字符判断、标志更新等)都是常数时间操作。
  • 因此,整个函数的时间复杂度是 O(n)。
2. 空间复杂度
  • 该算法中使用了固定的几个布尔变量来记录状态,这些变量的空间需求不随输入字符串的长度变化。
  • 因此,整个函数的空间复杂度是 O(1)。

五、总结知识点

  1. 字符串遍历:通过 for 循环对字符串中的每个字符进行遍历,这是处理字符串问题中常见的方法。

  2. 字符判断:使用 Character.isDigit(c) 方法来判断当前字符是否为数字字符,这是处理数字相关字符串问题时的基础操作。

  3. 标志位:定义了几个布尔变量(hasDigit, hasDecimal, hasExp)作为标志位,用来追踪字符串中是否出现了数字、小数点和指数部分。这是处理复杂字符串匹配问题时常用的技巧,通过标志位来记录字符串的某些属性或状态。

  4. 逻辑判断:在遍历过程中,使用了一系列的条件判断来确定当前字符是否符合有效数字的规则。例如,检查小数点前后是否有数字,检查指数部分是否正确等。

  5. 特殊情况处理:代码中特别处理了符号字符('+', '-')的位置,确保它们只出现在数字的前面,且前面必须有数字。

  6. 返回值:根据标志位的最终状态来决定返回 truefalse,这是判断类型问题的常见做法。

  7. 边界条件:代码中考虑了字符串为空或者不包含任何数字的情况,这些边界条件的处理对于确保算法的正确性非常重要。

  8. 错误处理:代码中通过返回 false 来处理不合法的输入,这是错误处理的一种简单有效的方法。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

串及BF算法

一.串的相关定义 1.字符串的拷贝,比较,链接等等(C语言) 2 串:用 引起来的字符序列,例如abcd (区别字符串"abcd") 3.空串: (区别字符串"") 4.子串:包含空串和本身,abc的子串:,a,b,c,ab,bc,abc7个 5.真子串:包含空串,不包含本身,abc的子串:,a,b,c,a…

自动驾驶仿真测试的难点

自动驾驶仿真测试是自动驾驶车辆商业化落地的一道重要关卡&#xff0c;仿真测试技术的发展进步将决定自动驾驶落地的时间点。 仿真测试对自动驾驶的重要性不言而喻&#xff0c;笔者写这些内容希望能够抛转引玉。更希望能够作为一个“呐喊者”让更多的人去关注和重视自动驾驶仿…

一条命令把视频和字幕合并成一个文件

ffmpeg -i input_video.mp4 -i input_subtitles.ass -c:s mov_text -c:v copy -map 0:v -map 0:a -map 1:s output_video.mp4 参数说明&#xff1a; -i input_video.mp4 指定输入视频文件。 -i input_subtitles.ass 指定输入的字幕文件。 -c:s mov_text 指定字幕编码器为mov…

【LeetCode: 705. 设计哈希集合 + 数据结构设计】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Qt快速入门(MV架构之TableView + QStandardItemModel + 自定义代理小案例)

Qt快速入门&#xff08;MV架构之TableView QStandardItemModel 自定义代理小案例&#xff09; 关于MV架构的简单介绍 在Qt框架中&#xff0c;代理&#xff08;Delegate&#xff09;、模型&#xff08;Model&#xff09;和视图&#xff08;View&#xff09;之间的关系构成了…

【数据工具】ArcGIS批量出图工具箱

工具下载链接&#xff1a;数据下载链接 我们在使用Arcgis制图的过程中&#xff0c;经常会遇到需要大量出图的情况&#xff0c;如何将做好的图批量导出jpg是一件令人头疼的问题。 今天小编就给大家分享俩个ArcGIS批量出图的工具箱&#xff0c;一个可以批量导出图层为jpg&#…

Java-Scanner类进阶+题目

Scanner进阶 接收整数数据时&#xff1a; 接收小数数据时&#xff1a; 例子&#xff1a; 可以先这样弄出scanner的框架&#xff1a; 未完待续... ...

科技论文和会议录制高质量Presentation Video视频方法

一、背景 机器人领域&#xff0c;许多高质量的期刊和会议&#xff08;如IEEE旗下的TRO&#xff0c;RAL&#xff0c;IROS&#xff0c;ICRA等&#xff09;在你的论文收录后&#xff0c;需要上传一个Presentation Video材料&#xff0c;且对设备兼容性和视频质量有较高要求&#…

2024年DTC的回顾与思考

刚结束了2024的数据库技术嘉年华 这是我从2017年开始就参加的技术大会。中途因为疫情的耽误。正常来说我是连续的。知道我的朋友都知道我习惯炫耀一下。 按照惯例&#xff0c;此时此刻群友都在写大会回顾。只是有几个不讲武德的人已经发送了。下面有主观和客观的分析。 主观上…

手机银行客户端框架之TMF框架介绍

腾讯移动开发平台&#xff08;Tencent Mobile Framework&#xff09;整合了腾讯在移动产品中开发、测试、发布和运营的技术能力&#xff0c;为企业提供一站式、覆盖全生命周期的移动端技术平台。核心服务包括移动客户端开发组件、H5容器、灰度发布、热更新、离线包、网关服务、…

LeetCode-15-三数之和问题

题目说明 给定一个包含 n 个整数的数组 nums&#xff0c;判断 nums 中是否存在三个元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;找出所有满足条件且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 给定数组 nums [-1, 0,…

Vol.41 SEO基本术语解释

1.TDK TDK&#xff1a;即标题、描述、关键词&#xff1b;TDK是网站的基本属性&#xff0c;对SEO非常重要&#xff0c;可以帮助搜索引擎了解你的网站&#xff1b; T&#xff1a;title 谷歌建议不超过70个字符 D&#xff1a;description 谷歌建议不超过150个字符 K&#xff1…

element-ui中el-radio-group组件绑定点击事件触发多次的解决办法

1、需求 电商首页需求&#xff0c;需要做个单选框&#xff0c;然后点击选中切换图标方向及更换价格升倒序&#xff0c;如下图&#xff1a; 从官网文档看&#xff0c;单选框支持change event&#xff0c;使用click加载按钮处不会触发选中 但是使用 click.native 事件不做处理…

ACID模型是什么

ACID模型是什么 ACID模型是数据库管理系统中保证事务处理安全性的一组特性。ACID是原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability&#xff09;四个英文单词的…

开源博客项目Blog .NET Core源码学习(15:App.Hosting项目结构分析-3)

本文学习并分析App.Hosting项目中前台页面的关于本站页面和点点滴滴页面。 关于本站页面 关于本站页面相对而言布局简单&#xff0c;与后台控制器类的交互也不算复杂。整个页面主要使用了layui中的面包屑导航、选项卡、模版、流加载等样式或模块。   面包屑导航。使用layui…

初探vercel托管项目

文章目录 第一步、注册与登录第二步、本地部署 在个人网站部署的助手vercel&#xff0c;支持 Github部署&#xff0c;只需简单操作&#xff0c;即可发布&#xff0c;方便快捷&#xff01; 第一步、注册与登录 进入vercel【官网】&#xff0c;在右上角 login on&#xff0c;可登…

WXML模板语法-条件与列表渲染

wx:if 在小程序中&#xff0c;使用wx:if"{{condition}}"来判断是否需要渲染该代码 也可以用wx:elif和wx:else来添加else判断 <!--pages/ifIndex/ifindex.wxml--> <view wx:if"{{type 1}}">男</view> <view wx:elif"{{type …

【Linux】磁盘与文件系统管理

目录 一、 磁盘结构 1. 数据结构 2. 物理结构 3. 硬盘的接口类型 二、 如何使用Linux中的磁盘 三、 文件系统 四、 磁盘分区 1. MBR分区 2. 分区的优缺点 3. 磁盘及分区的管理工具 五、格式化与挂载 1. 格式化 2. 挂载 六、实例演示 1. 演示分区格式化挂载 2. …

24年大一4月14日训练(东北林业大学)

前言&#xff1a; 今晚的5道题。 正文&#xff1a; Problem:A宋哥猜拳(2)&#xff1a; #include<bits/stdc.h> using namespace std; int main(){int t;cin>>t;while(t--){string x;cin>>x;int a0,b0,c0,lx.length();// cout<<l;for(int i0;i<l;i…

反射与动态代理

一、反射 什么是反射? 反射允许对成员变量&#xff0c;成员方法和构造方法的信息进行编程访问 1.获取class对象的三种方式 Class这个类里面的静态方法forName&#xff08;“全类名”&#xff09;&#xff08;最常用&#xff09; 通过class属性获取 通过对象获取字节码文件对…