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

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

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

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

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

若干空格
一个 小数 或者 整数
(可选)一个 ‘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

模拟

参考大佬思路
k神的有限状态机看不懂
题目定义的格式,对字符串直接分段判断更直观

  1. 去掉头尾空格,处理剩下部分
  2. 判断是否带e/E
  • 不带,要求是整数或小数
  • 带,以e/E为分隔符,分为前后两部分,前面要求整数或小数,后面要求整数
static inline bool isSignChar(char c) {return c == '+' || c == '-';
}static inline bool isNumChar(char c) {return c >= '0' && c <= '9';
}// 判断是否整数
static bool isInteger(const char* s, int len) {if (len <= 0)return false;// 判断符号字符if (isSignChar(s[0]) && len > 1) {++s;--len;}for (int i = 0; i < len; ++i) {if (!isNumChar(s[i]))return false;}return true;
}// 判断是否小数
static bool isDecimal(const char* s, int len) {if (len <= 0)return false;if (isSignChar(s[0]) && len > 1) {++s;--len;}int dot_index = -1;for (int i = 0; i < len; ++i) {if (s[i] == '.') {if (dot_index == -1)dot_index = i;elsereturn false;} else if (!isNumChar(s[i]))return false;}// 至少存在 '.' 和一个数字return dot_index >= 0 ? len > 1 : false;
}class Solution {
public:bool isNumber(string s) {const char* p = s.c_str();int len = s.length();// 跳过头尾空格const char* l = p, *r = p + len - 1;while (l <= r && *l == ' ') ++l;while (l <= r && *r == ' ') --r;// 全是空格或空字符串if (l > r) {return false;}// 搜索 e/Econst char* c = l;while (c <= r && *c != 'e' && *c != 'E')++c;if (c < r) {// 有 e/E,后面跟整数return (isInteger(l, c - l) || isDecimal(l, c - l)) && isInteger(c + 1, r - c);} else {// 无 e/Ereturn isInteger(l, r - l + 1) || isDecimal(l, r - l + 1);}}
};

相关文章:

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

剑指 Offer 20. 表示数值的字符串 请实现一个函数用来判断字符串是否表示数值&#xff08;包括整数和小数&#xff09;。 数值&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 若干空格 一个 小数 或者 整数 &#xff08;可选&#xff09;一个 ‘e’ 或 ‘…...

阻抗匹配之反射波形测量

稍微接触过高速信号的朋友&#xff0c;一定对阻抗匹配和信号反射都有所了解&#xff0c;甚至可以按照公式&#xff0c;把反射波形一路推导出来。但是&#xff0c;纸上得来终绝浅&#xff0c;绝知此事要躬行。 今天&#xff0c;我们就来实测一下信号反射波形&#xff0c;测试环…...

微信小程序 java家校通Springboot中小学家校联系电子作业系统

小程序前端框架&#xff1a;uniapp 小程序运行软件&#xff1a;微信开发者 后端技术:javaSsm(SpringSpringMVCMyBatis)vue.js 后端开发环境:idea/eclipse 数据库:mysql 通过对各种资料的收集&#xff0c;了解到“校讯通”是联系社会的窗口&#xff0c;是实现家校联系工作和学校…...

Fluent Python 笔记 第 8 章 对象引用、可变性和垃圾回收

本章先以一个比喻说明 Python 的变量&#xff1a;变量是标注&#xff0c;而不是盒子。如果你不知道引用式变量是什么&#xff0c;可以像这样对别人解释别名。 然后&#xff0c;本章讨论对象标识、值和别名等概念。随后&#xff0c;本章会揭露元组的一个神奇特性&#xff1a;元…...

转义字符的分类

什们是转义字符 可显示字符在字符集中&#xff0c;有一类字符具有这样的特性&#xff1a;当从键盘上输入这个字符时&#xff0c;显示器上就可以显示这个字符&#xff0c;即输入什么就显示什么。这类字符称为可显示字符&#xff0c;如a、b、c、$、和空格符等都是可显示字符。 控…...

剑指 Offer 03. 数组中重复的数字

剑指 Offer 03. 数组中重复的数字 一、题目描述&#xff1a; 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出…...

飞速创新更新IPO招股书:计划募资约14亿元,向伟为实际控制人

近日&#xff0c;深圳市飞速创新技术股份有限公司&#xff08;下称“飞速创新”&#xff09;预披露更新招股书&#xff0c;准备在深圳证券交易所主板上市。本次冲刺上市&#xff0c;飞速创新计划募资13.54亿元&#xff0c;招商证券为其保荐机构。 据介绍&#xff0c;飞速创新专…...

JUC(java.util.concurrent) 的常见类

1.ReentrantLock 可重入互斥锁. 和 synchronized 定位类似, 都是用来实现互斥效果, 保证线程安全. ReentrantLock 也是可重入锁. "Reentrant" 这个单词的原意就是 "可重入. ReentrantLock 的用法: lock(): 加锁, 如果获取不到锁就死等.trylock(超时时间):…...

Angular4 中 ckeditor5 插件的使用

Angular4 中 ckeditor5 插件的使用 0 环境、新建项目 环境&#xff1a; Windows10Angular/cli1.4.10&#xff08;安装 Angular 的过程略过&#xff0c;Angular4 版本比较古老&#xff0c;这也导致项目安装插件及其他操作比较麻烦&#xff09; 1. ckeditor5 官方用法 基础用…...

[python刷题模板] 前缀函数/next数组/kmp算法

[python刷题模板] 前缀函数/next数组/kmp算法 一、 算法&数据结构1. 描述2. 复杂度分析3. 常见应用4. 常用优化二、 模板代码1. 裸前缀函数2. 树上kmp3. 裸kmp三、其他四、更多例题五、参考链接一、 算法&数据结构 1. 描述 前缀函数和next数组基本上是一个东西&#…...

rust 程序设计语言入门(1)

本文是阅读《Rust程序设计语言》的学习记录&#xff0c;配合视频《Rust编程语言入门教程》食用更佳 环境搭建 windows下载rustup_init.exe&#xff0c;点击安装&#xff0c;默认选择msvc的toolchain&#xff0c;一路default即可 解决下载慢的问题&#xff0c;在powershell中修…...

基于蜣螂算法改进的LSTM预测算法-附代码

基于蜣螂算法改进的LSTM预测算法 文章目录基于蜣螂算法改进的LSTM预测算法1.数据2.LSTM模型3.基于蜣螂算法优化的LSTM4.测试结果5.Matlab代码摘要&#xff1a;为了提高LSTM数据的预测准确率&#xff0c;对LSTM中的参数利用蜣螂搜索算法进行优化。1.数据 采用正弦信号仿真数据&…...

Python安全开发——Scapy流量监控模块watchdog

目录 Python蓝队项目说明 (一)Python-蓝队项目-Scapy流量分析 0x01 Scapy参数介绍...

阶段二5_集合ArrayList

一.对象数组 1.对象数组使用案例 需求&#xff1a;将&#xff08;张三&#xff0c;23&#xff09;&#xff08;李四&#xff0c;24&#xff09;&#xff08;王五&#xff0c;25&#xff09; 封装为3个学生对象并存入数组 随后遍历数组&#xff0c;将学生信息输出在控制台 思路…...

十一、Python——匿名函数

1.匿名函数:简化函数定义 2.格式 lambda 参数1&#xff0c;参数2…&#xff1a;运算 3.匿名函数特点 不需要指明函数名定义只有一条语句函数体必须是一个表达式不能显示使用return 4.匿名函数实现求和 s lambda a,b:a b result s(1,2) print(result) # 35.匿名函数作…...

数组常使用的方法

1. join (原数组不受影响)该方法可以将数组里的元素,通过指定的分隔符,以字符串的形式连接起来。返回值:返回一个新的字符串const arr[1,3,4,2,5]console.log(arr.join(-)&#xff1b;//1-3-4-2-52. push该方法可以在数组的最后面,添加一个或者多个元素结构: arr.push(值)返回值…...

2023华为软件测试笔试面试真题,抓紧收藏不然就看不到了

一、选择题 1、对计算机软件和硬件资源进行管理和控制的软件是&#xff08;D&#xff09; A.文件管理程序 B.输入输出管理程序 C.命令出来程序 D.操作系统 2、在没有需求文档和产品说明书的情况下只有哪一种测试方法可以进行的&#xff08;A&#xff09; A.错误推测法测…...

洛谷2月普及组(月赛)

&#x1f33c;小宇&#xff08;治愈版&#xff09; - 刘大拿 - 单曲 - 网易云音乐 OI赛制且难度对标蓝桥杯省赛&#xff08;&#x1f625;真难&#xff0c;第三题做了几百年&#xff0c;第四题只敢骗骗分&#xff09; 花了10块钱&#x1f643; 买官网的思路&#xff0c;结果…...

【博学谷学习记录】超强总结,用心分享 | 架构师 Spring源码学习总结

文章目录Spring的循环依赖1.循环依赖的定义&&原因2.循环依赖的场景1.构造器注入引起循环依赖2.Field属性setter注入的循环依赖3.循环依赖解决思路4.三级缓存5.面试题[三级缓存]AOP源码深度剖析概述Spring AOP的前世今生实现机制**JDK 动态代理****CGLIB 代理**流程总结…...

Linux C/C++ timeout命令实现(运行具有时间限制)

Linux附带了大量命令&#xff0c;每个命令都是唯一的&#xff0c;并在特定情况下使用。Linux timeout命令的一个属性是时间限制。可以为任何命令设置时间限制。如果时间到期&#xff0c;命令将停止执行。 如何使用timeout命令 我们将解释如何使用Linux timeout命令 timeout […...

【Gemini赋能Google Meet实时字幕】:2024企业级会议无障碍升级的5大落地陷阱与避坑指南

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini赋能Google Meet实时字幕的技术演进与企业价值定位 Google Meet 的实时字幕能力已从早期基于传统语音识别&#xff08;ASR&#xff09;的静态模型&#xff0c;跃迁至由 Gemini 多模态大模型深度驱…...

告别并行接口:手把手教你用Stm32F4的SPI高效读取AD7606八通道数据

告别并行接口&#xff1a;手把手教你用Stm32F4的SPI高效读取AD7606八通道数据 在嵌入式系统设计中&#xff0c;AD7606作为一款高性能八通道16位ADC芯片&#xff0c;常被用于电力监测、工业控制等需要多通道高精度采样的场景。传统方案往往依赖其并行接口实现数据读取&#xff…...

【限时解密】Midjourney Anthotype印相黄金比例:1:1.618构图×植物色素衰减曲线=不可复制的复古质感

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney Anthotype印相的本质溯源与时代语境 Anthotype&#xff08;植物感光印相&#xff09;是一种源于19世纪的古老摄影工艺&#xff0c;利用植物提取物&#xff08;如甜菜根、黑醋栗或蒲公英花汁…...

Bebas Neue 开源字体技术解析:几何美学与多平台兼容性实现

Bebas Neue 开源字体技术解析&#xff1a;几何美学与多平台兼容性实现 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue Bebas Neue 是一款基于 SIL Open Font License 1.1 许可证的开源显示字体&#xff0c;专为标…...

Equalizer APO完整教程:免费系统级音频均衡器从入门到精通

Equalizer APO完整教程&#xff1a;免费系统级音频均衡器从入门到精通 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo Equalizer APO是一款功能强大的免费开源系统级音频均衡器软件&#xff0c;能够为W…...

用Arduino和MAX30102做个心率血氧仪,从硬件连线到算法调试全流程避坑

从零构建Arduino心率血氧仪&#xff1a;MAX30102实战指南 开篇&#xff1a;为什么选择MAX30102&#xff1f; 在可穿戴健康设备爆发的时代&#xff0c;心率血氧监测已成为智能手环的标配功能。而MAX30102这颗高度集成的光学传感器&#xff0c;正以医用级精度和低功耗特性成为创客…...

连接器选型三张“底牌”:电源、高速、射频的隐性代价与系统级权衡

当产品进入量产阶段&#xff0c;连接器往往是“压死骆驼的最后一根稻草”。它不像芯片那样有明确的数据手册边界&#xff0c;也不像PCB那样可归咎于Layout规则。连接器的失效模式高度依赖“配合状态”——插拔了几次&#xff1f;压接用了什么工具&#xff1f;相邻器件发热多少&…...

Hypha框架深度解析:现代Python异步Web开发与API构建实践

1. 项目概述&#xff1a;Hypha&#xff0c;一个被低估的轻量级Web框架 如果你和我一样&#xff0c;长期在Web后端开发领域摸爬滚打&#xff0c;那么对Flask、FastAPI、Express这些名字一定耳熟能详。它们各有千秋&#xff0c;也各有其“甜蜜点”和“痛点”。最近在GitHub上闲逛…...

别再堆模型了!SITS 2026验证有效的AI运维成熟度评估矩阵(含6维度22项量化指标)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生运维体系构建&#xff1a;SITS 2026智能运维专场精华 AI原生运维&#xff08;AIOps Native&#xff09;已从概念验证迈入生产就绪阶段。SITS 2026智能运维专场首次提出“感知-推理-执行-进化”四…...

历史周期律的动力学本质:集体意识场视角下的文明演进规律

引言 历史周期律——王朝兴替、文明盛衰、社会变革的波浪式重复——是人类文明最令人困惑又最无法回避的现象。从司马迁的“天下大势&#xff0c;分久必合&#xff0c;合久必分”&#xff0c;到汤因比的文明挑战-回应理论&#xff0c;无数先贤试图揭示这一规律的底层逻辑。然而…...