当前位置: 首页 > news >正文

【剑指Offer】20.表示数值的字符串

题目

请实现一个函数用来判断字符串str是否表示数值(包括科学计数法的数字,小数和整数)。

科学计数法的数字(按顺序)可以分成以下几个部分:

1.若干空格

2.一个整数或者小数

3.(可选)一个 'e' 或 'E' ,后面跟着一个整数(可正可负)

4.若干空格

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

1.若干空格

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

3. 可能是以下描述格式之一:

3.1 至少一位数字,后面跟着一个点 '.'

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

3.3 一个点 '.' ,后面跟着至少一位数字

4.若干空格

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

1.若干空格
2.(可选)一个符号字符('+' 或 '-')

3. 至少一位数字

4.若干空格

例如,字符串["+100","5e2","-123","3.1416","-1E-16"]都表示数值。

但是["12e","1a3.14","1.2.3","+-5","12e+4.3"]都不是数值。

提示:

1. 1<=str.length<=25

2. str 仅含英文字母(大写和小写),数字(0-9),加号 '+' ,减号 '-' ,空格 ' ' 或者点 '.' 。

3. 如果怀疑用例是不是能表示为数值的,可以使用python的print(float(str))去查看

进阶:时间复杂度O(n) ,空间复杂度O(n) 

示例1

输入:"123.45e+6"

返回值:true

示例2

输入:"1.2.3"

返回值:false

示例3

输入:"."

返回值:false

示例4

输入:" .2 "

返回值:true

解答

源代码

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param str string字符串 * @return bool布尔型*/public boolean isNumeric (String str) {// write code hereif (str == null) {return false;}// 标记前面是否遇到小数点、数字、'e'或'E'boolean isDot = false, isNum = false, isE = false;// 清楚字符串头尾空格,转换为字符数组char[] arr = str.trim().toCharArray();for (int i = 0; i < arr.length; i++) {// 当前字符为数字if (arr[i] >= '0' && arr[i] <= '9') {isNum = true;} else if (arr[i] == '.') {// 小数点之前不能有其他小数点,小数点也不能出现在e或E后面if(isDot || isE) {return false;}isDot = true;} else if (arr[i] == 'E' || arr[i] == 'e') {// e或E的前面必须有数字,并且不能有其他的Eif (!isNum || isE) {return false;}isE = true;// 重置isNum,因为e或E之后必须接整数isNum = false;} else if (arr[i] == '+' || arr[i] == '-') {// 正负号只能存在于第一个字符或者'e'或'E'之后的第一个字符if (i != 0 && arr[i - 1] != 'e' && arr[i - 1] != 'E') {return false;}} else {return false;}}// 必须有数字return isNum;}
}

总结

这题还挺烧脑的就我个人来说……看了几个题解觉得这个理解起来逻辑最清晰,就是需要考虑到各种情况,可能一个不谨慎就漏了,需要多检查、仔细思考。

http://www.lryc.cn/news/192394.html

相关文章:

  • 2023年9月Web3行业月度发展报告区块链篇 | 陀螺科技会员专享
  • Unity 快捷键的一些记录
  • GIT指令 - git stash
  • LiveMedia视频中间件视频隐私打码直播解决方案
  • 关于神经网络的思考
  • CodeForces每日好题10.14
  • Python Django 之连接 Mysql 数据库详解
  • Java设计模式:Callback
  • 年底旺季,Shopee、Lazada如何通过测评补单技术打造产品权重收割流量
  • CentOS 7 安装 MySQL8.0
  • C# 往多线程传递安全参数的方法
  • Java之SPI
  • 【数据结构】算法的空间复杂度
  • 恢复Windows 11经典右键菜单:一条命令解决显示更多选项问题
  • Android:事件分发机制(二)
  • vue2时间处理插件——dayjs
  • 软考 系统架构设计师系列知识点之软件质量属性(6)
  • Python6-wxPython库
  • 使用OpenSSL的反弹shell
  • 竞赛选题 深度学习OCR中文识别 - opencv python
  • ezEIP信息泄露
  • 02.机器学习原理(复习)
  • 电源集成INN3270C-H215-TL、INN3278C-H114-TL、INN3278C-H215-TL简化了反激式电源转换器的设计和制造。
  • UE4和C++ 开发--HUD类
  • 使用js怎么设置视频背景
  • Gin,Gorm实现Web计算器
  • 11-网络篇-DNS步骤
  • 设计师都应该知道的事:极简主义家具该怎么去用
  • 设计模式02———建造者模式 c#
  • 2023最新接口自动化测试面试题