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

剑指 Offer 20. 表示数值的字符串(java+python)

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。

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

若干空格
一个 小数 或者 整数
(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数
若干空格
小数(按顺序)可以分成以下几个部分:

(可选)一个符号字符(‘+’ 或 ‘-’)
下述格式之一:
至少一位数字,后面跟着一个点 ‘.’
至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字
一个点 ‘.’ ,后面跟着至少一位数字
整数(按顺序)可以分成以下几个部分:

(可选)一个符号字符(‘+’ 或 ‘-’)
至少一位数字
部分数值列举如下:

[“+100”, “5e2”, “-123”, “3.1416”, “-1E-16”, “0123”]
部分非数值列举如下:

[“12e”, “1a3.14”, “1.2.3”, “±5”, “12e+5.4”]

示例 1:

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

示例 2:

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

示例 3:

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

示例 4:

输入:s = "    .1  "
输出:true

提示:

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

java

class Solution {public boolean isNumber(String s) {Map[] states = {new HashMap<>() {{ put(' ', 0); put('s', 1); put('d', 2); put('.', 4); }},new HashMap<>() {{ put('d', 2); put('.', 4); }},new HashMap<>() {{ put('d', 2); put('.', 3); put('e', 5); put(' ', 8); }},new HashMap<>() {{ put('d', 3); put('e', 5); put(' ', 8); }},new HashMap<>() {{ put('d', 3); }},new HashMap<>() {{ put('s', 6); put('d', 7); }},new HashMap<>() {{ put('d', 7); }},new HashMap<>() {{ put('d', 7); put(' ', 8); }},new HashMap<>() {{ put(' ', 8); }}};int p = 0;char t;for(char c : s.toCharArray()) {if(c >= '0' && c <= '9') t = 'd';else if(c == '+' || c == '-') t = 's';else if(c == 'e' || c == 'E') t = 'e';else if(c == '.' || c == ' ') t = c;else t = '?';if(!states[p].containsKey(t)) return false;p = (int)states[p].get(t);}return p == 2 || p == 3 || p == 7 || p == 8;}
}

python

class Solution(object):def isNumber(self, s):states = [{ ' ': 0, 's': 1, 'd': 2, '.': 4 },{ 'd': 2, '.': 4 } ,{ 'd': 2, '.': 3, 'e': 5, ' ': 8 },{ 'd': 3, 'e': 5, ' ': 8 },{ 'd': 3 },{ 's': 6, 'd': 7 },{ 'd': 7 },{ 'd': 7, ' ': 8 },{ ' ': 8 }]p = 0for c in s:if '0' <= c <= '9': t = 'd'elif c in "+-": t = 's'elif c in "eE": t = 'e'elif c in ". ": t = celse: t = '?'if t not in states[p]: return Falsep = states[p][t]return p in (2, 3, 7, 8)
http://www.lryc.cn/news/33968.html

相关文章:

  • 程序员的逆向思维
  • 吐血整理学习方法,2年多功能测试成功进阶自动化测试,月薪23k+......
  • mysql慢查询:pt-query-digest 分析
  • git的使用整合
  • XCPC第九站———背包问题!
  • 【软考 系统架构设计师】论文范文④ 论基于构件的软件开发
  • spring-integration-redis中分布式锁RedisLockRegistry的使用
  • 城市通电(prim算法)
  • 【动态规划】
  • 秒懂算法 | DP概述和常见DP面试题
  • 【C++提高编程】C++全栈体系(二十五)
  • 【云原生】k8s核心技术—集群安全机制 Ingress Helm 持久化存储-20230222
  • 【Linux】实现简易的Shell命令行解释器
  • 再获认可!腾讯安全NDR获Forrester权威推荐
  • 代码审计之旅之百家CMS
  • ONLYOFFICE中利用chatGPT帮助我们策划一场生日派对
  • Java面试题-线程(一)
  • 一篇普通的bug日志——bug的尽头是next吗?
  • Vue 3 第八章:Watch侦听器
  • GlassFish的安装与使用
  • 【java】Java 重写(Override)与重载(Overload)
  • OpenCV-PyQT项目实战(12)项目案例08:多线程视频播放
  • 面向对象设计模式:结构型模式之装饰器模式
  • Unity iOS 无服务器做一个排行榜 GameCenter
  • 现在招个会自动化测试的人是真难呀~你会个锤子的自动化测试
  • OracleDatabase——数据库表空间dmp导出与导入
  • 20张图带你彻底了解ReentrantLock加锁解锁的原理
  • Dockerfile构建Springboot镜像
  • 从深分页查询到覆盖索引
  • Go语言学习的第三天--下部分(Gin框架的基础了解)