[LeetBook]【学习日记】有效数字——状态机

题目

有效数字

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

  • 若干空格
  • 一个小数或者整数
  • (可选)一个’e’或’E’,后面跟着一个整数
  • 若干空格

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

  • (可选)一个符号字符(‘+‘或’-’)
  • 下述格式之一:
    • 至少一位数字,后面跟着一个点 ‘.’
    • 至少一位数字,后面跟着一个点 ‘.’,后面再跟着至少一位数字
    • 一个点 ‘.’,后面跟着至少一位数字

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

  • (可选)一个符号字符(‘+‘或’-’)
  • 至少一位数字

部分有效数字列举如下:[“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),加号’+‘,减号’-‘,空格’ ‘或者点’.'。

解法

  • 这道题很容易想到遍历字符串,对不同情况进行判断,遇到不符合题意的情况就直接退出
  • 但是情况数比较多,需要写很多判断分支,比如底数是否有正负符号就有3种情况,指数有没有正负符号又是三种情况,这已经有九种情况符合题意了
  • 能不能有一种方法,以简洁的方式规定好每种情况后面可以出现的情况,一旦出现了不在规定里的情况,就不为有效数字;并且如果在还未完成有效数字时,在某个中间情况戛然而止,也不为有效数字
  • 这其实有点像拓扑排序,在这题中,对有向无环图,定义每个节点以及所有有效的最终节点,查找从起始节点 u 是否有路径 u->v 通往最终节点 v
    在这里插入图片描述
class Solution {
public:
    bool validNumber(string s) {
        //0.前导空格->0,1,2,4
        //1.底数正负符号->2,4
        //2.底数有整数部分的整数(234的2)->2,3,5,8
        //3.小数点或者点后的数字->3,5,8
        //4.底数没有整数部分时的小数点(.123的.),当小数点后有数字->3
        //5.e或者E->6,7
        //6.指数正负符号->7
        //7.指数部分的数字->7,8
        //8.后导空格->8

        //2,3,7,8为正确的出口
        vector<map<char, int>> states = {
            {{' ',0}, {'s',1}, {'d',2}, {'.',4}},   //在0状态遍历到的符号对应的可以转移的状态
            {{'d',2}, {'.',4}},                     //1状态转移
            {{'d',2}, {'.',3}, {'e',5}, {' ',8}},   //2状态转移
            {{'d',3}, {'e',5}, {' ',8}},            //3
            {{'d',3}},                              //4
            {{'s',6}, {'d',7}},                     //5
            {{'d',7}},                              //6
            {{'d',7}, {' ',8}},                     //7
            {{' ',8}}                               //8
        };
        char curChType = '?';//当前字符类型,数字'd'、符号's'、幂符号'e'、点'.'、空格' '
        int curState = 0;//初始状态设置为0,因为0没有前驱状态
        for(auto &ch:s){
            if(isdigit(ch)) curChType='d';
            else if(ch=='+' || ch=='-') curChType='s';
            else if(ch=='e' || ch=='E') curChType='e';
            else if(ch=='.') curChType='.';
            else if(ch==' ') curChType=' ';
            else return false;
            if(states[curState].find(curChType) != states[curState].end()){
                curState = states[curState].find(curChType)->second;
            }
            else return false;
        }
        return curState==2 || curState==3 || curState==7 || curState==8;
    }
};

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

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

相关文章

微信小程序python+uniapp+hbuiderx宠物美容用品商城领养寄养系统i843n

宠物中心信息管理系统app是在安卓操作系统下的应用平台。为防止出现兼容性及稳定性问题&#xff0c;编辑器选择的是Hbuildex&#xff0c;安卓APP与后台服务端之间的数据存储主要通过MySQL。用户在使用应用时产生的数据通过 python等语言传递给数据库。通过此方式促进宠物中心信…

JS实现chatgpt数据流式回复效果

最近高了一个简单chatgpt对话功功能&#xff0c;回复时希望流式回复&#xff0c;而不是直接显示结果&#xff0c;其实很简单&#xff0c;前端流式读取即可&#xff0c;后端SSE实现流式传输 前端用到fetch获取数据&#xff0c;然后利用reader读取 let requestId parseInt(Ma…

flink重温笔记(十一):Flink 高级 API 开发——flink 四大基石之 Checkpoint(详解存储后端)

Flink学习笔记 前言&#xff1a;今天是学习 flink 的第 11 天啦&#xff01;学习了 flink 四大基石之 Checkpoint &#xff08;检查点&#xff09;&#xff0c;主要是解决大数据领域持久化中间结果数据&#xff0c;以及取消任务&#xff0c;下次启动人可以恢复累加数据问题&…

STC89C52串口通信详解

目录 前言 一.通信基本原理 1.1串行通信与并行通信 1.2同步通信和异步通信 1.2.1异步通信 1.2.2同步通信 1.3单工、半双工与全双工通信 1.4通信速率 二.串口通信简介 2.1接口标准 2.2串口内部结构 2.3串口相关寄存器 三.串口工作方式 四.波特率计算 五.串口初始化步骤 六.实验…

centos7中python3.10找不到openssl解决方案

如果有用其他方法安装了其他版本openssl&#xff0c;记得卸载其他的openssl&#xff0c;删除其他的openssl相关文件。 yum remove openssl* rm -rf ***下载最新版的openssl文件 按照官网安装方法安装openssl 官方安装地址https://docs.python.org/3/using/unix.html#on-linu…

平台工程指南:从架构构建到职责分工

平台工程只是 DevOps 专业化的另一个术语&#xff0c;还是另有所指&#xff1f;事实可能介于两者之间。DevOps 及其相关的 DevXOps 有着浓厚的文化色彩&#xff0c;以各个团队为中心。不幸的是&#xff0c;在许多地方&#xff0c;DevOps 引发了新的问题&#xff0c;如工具激增和…

【Appium问题】每次启动appium都会安装一次uiautomator

问题 每次启动appium&#xff0c;都需要安装一次uiautomator2比较麻烦 解决 在配置文件capabilities 中增加参数skipServerInstallationTrue

关于springboot一个接口请求后,主动取消后,后端是否还在跑

1、最近在思考一个问题&#xff0c;如果一个springboot的请求的接口比较耗时&#xff0c;中途中断该请求后&#xff0c;则后端服务是否会终止该线程的处理&#xff0c;于是写了一个demo RequestMapping(value "/test", method RequestMethod.GET)public BasicResul…

3环PEB断链实现

那么我们首先定义_PEB_LDR_DATA和_LDR_DATA_TABLE_ENTRY结构 // LDR链表头 typedef struct _PEB_LDR_DATA {DWORD Length;bool Initialized;PVOID SsHandle;LIST_ENTRY InLoadOrderModuleList; // 指向了 InLoadOrderModuleList 链表的第一项LIST_ENTRY InMemoryOrderModuleLi…

AI 赋能 UGC 内容审核解决方案

随着游戏行业的发展&#xff0c;其内容审核越来越严格&#xff0c;任何有害或敏感信息的曝光都可能使游戏公司平台遭受灾难。传统上需要大量人工审核这项工作&#xff0c;存在处理时间长、成本高的问题。而AI 赋能的内容审核可以大大加快流程。九河云对多家云厂商有所了解及有一…

C语言实现基础数据结构——二叉树(二叉树基础部分)

目录 二叉树的概念和结构 二叉树的性质 二叉树的性质基础练习 二叉树的存储结构 二叉链式二叉树的基本功能实现 二叉链式二叉树的结构定义 主要实现功能 创建树节点 创建树 前序遍历、中序遍历、后序遍历以及层序遍历 基础选择练习 二叉树的节点个数 二叉树叶子节点的个数 求二…

WordPress建站入门教程:phpMyAdmin4.8.5出现Fatal error: Unparenthesized错误怎么办?

我们在本地电脑使用小皮面板phpstudy安装phpMyAdmin4.8.5成功后&#xff0c;但是点击【管理】功能打开时却出现如下错误&#xff1a; Fatal error: Unparenthesized a ? b : c ? d : e is not supported. Use either (a ? b : c) ? d : e or a ? b : (c ? d : e) in D:\…

2024_01蓝桥杯STEMA 考试 Scratch 中级试卷解析​​​​​​​

2024_01蓝桥杯STEMA 考试 Scratch 中级试卷解析一、选择题第一题、运行下列哪段程序后,蜜蜂会向上移动?(C ) 第二题、运行以下程序,输入下列哪个数后,角色会说“未通过”?( D) A. 90 B. 85 C. 60 D. 58第三题、运行以下程序后,n 的值为(B )。 A. 17 B…

1-安装rabbitmq

rabbitmq官网&#xff1a; https://www.rabbitmq.com/docs/download 本机环境&#xff1a;mac&#xff0c;使用orbstack提供的docker 使用docker部署rabbitmq docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management 然后报错&#xf…

论文笔记 - 基于振动信号的减速器故障诊断方法

1.论文摘要 基于振动信号的减速器故障诊断方法, 沈晴,《起重运输机械》,2018 原作者联系方式: shenqing@zmpc.com 这篇文章包含了一个从工程到数据处理和故障定位的完整过程。是一篇综述文档。它介绍了机械设备常见的三类故障(轴,齿轮、轴承)的故障特征,并在一个故障追…

UE4 Niagara 关卡4.1官方案例解析

we now directly supporting playing audio from arbitrary locations in particle systems.users have control over volume and pitch,and the system can directly play sound waves,or sound cues which have multiple waves in them.(我们现在直接支持在粒子系统中从任意…

安卓简单登录

注意 有的朋友不知道登录咋写&#xff0c;这里我就简单给出相应代码&#xff0c;用的本地存储&#xff0c;没用网络请求&#xff0c;有需要可以替换成想要的&#xff0c;废话不多上代码 登录 import androidx.appcompat.app.AppCompatActivity;import android.content.Context…

axios网络请求库语法

post,get方法: 代码示例 请求成功后控制台返回信息 axios统一使用方式:axios(config) 理解为调用一个方法&#xff0c;方法里带上配置信息 Axios API | Axios中文文档 | Axios中文网 (axios-http.cn) axios中文网

广告设计素材网站有哪些?这六个强烈推荐!

广告设计是一项非常重要的工作&#xff0c;材料的选择和应用是影响广告生产质量的重要因素之一。在选择材料时&#xff0c;我们必须选择高质量、优秀的材料&#xff0c;以使广告设计更加辉煌。这里有一些值得推荐的材料网站。 即时设计 - 可实时协作的专业 UI 设计工具即时设计…

开发一套pacs系统需要考虑哪些因素?

PACS全称Picture Archivingand Communication Systems。它是应用在医院影像科室的系统&#xff0c;主要的任务就是把日常产生的各种医学影像&#xff08;包括核磁&#xff0c;CT&#xff0c;超声&#xff0c;X光机&#xff0c;红外仪、显微仪等设备产生的图像&#xff09;通过各…