数据结构与算法之图: Leetcode 65. 有效数字 (Typescript版)

news2024/11/19 10:49:04

有效数字

  • https://leetcode.cn/problems/valid-number/

描述

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

    • 一个 小数 或者 整数
    • (可选)一个 ‘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),加号 ‘+’ ,减号 ‘-’ ,或者点 ‘.’ 。

算法实现

1 )正则

function isNumber(s: string): boolean {
    return new RegExp(`^([+-]?\\d+\\.?\\d*|[+-]?\\d*\\.?\\d+)([eE]([+-]?\\d+))?$`).test(s);
};
  • 一般在前端工具中, 会提供一个工具类,判断是否是有效的数字,而这个工具类,一般也用正则处理

2 )原生API

function isNumber(s: string): boolean {
    if(s == "Infinity"||s=="-Infinity"||s=="+Infinity") return false
    return !isNaN(Number(s));
}
  • 这是Javascript中提供的原生API直接可进行判断

3 )邻接表(图)标识的状态机

function isNumber(s: string): boolean {
    const graph = {
        0: {'blank': 0, 'sign': 1, '.': 2, 'digit': 6},
        1: {'digit': 6, '.': 2},
        2: {'digit': 3},
        3: {'digit': 3, 'e': 4},
        4: {'digit': 5, 'sign': 7},
        5: {'digit': 5},
        6: {'digit': 6, '.': 3, 'e': 4},
        7: {'digit': 5},
    }
    let state = 0; // 记录一个变量
    // 遍历字符串, 先取出字符串的前后空格
    for(let c of s.trim()) {
        // 接下来把字符稍微做一些转化
        if(c >='0' && c <= '9') {
            // js做比较时候,会把字符转换成数字
            c = 'digit';
        } else if(c === ' ') {
            c = 'blank';
        } else if(c === '+' || c === '-') {
            c = 'sign';
        }
        // 获取新的状态  这里 toLowerCase 防止 E 的出现, 其他字符不是字母也不会报错
        state = graph[state][c.toLowerCase()];
        if(!state) return false;
    }
    return [3, 5, 6].includes(state);
}

  • 解题思路
    • 用一张图的数据结构,存储节点
    • 节点是字符串的8种状态,这8种状态只有3,5,6是合法的数字
    • 状态之间可以相互转换
      • 对于一个空字符串来说,它的状态是0,如果在空字符串后面加上一个+/-号,它就会从状态0变成状态1
      • 在状态1这个状态下,后面再加上点这个符号,它会变成状态2
      • 对于状态2来说,后面再加上0-9这个数字,它就会变成状态3
      • 后面依次类推
    • 有了这个图我们可以方便判断字符串是否是有效数字了
    • 从状态0开始,一个字符一个字符的走,最终能走到3,5,6这三个状态,它就是有效的
    • 否则,不管是走不到,还是到某个节点没路走了,它都是无效的
  • 解题步骤
    • 构建一个表示状态的图的数据结构,用邻接表的表示法
    • 遍历字符串中的每个字符,并沿着图走,从状态0开始,如果到了某个节点无路可走就返回false
    • 遍历结束,如果走到3,5,6状态,则返回true, 否则返回false
  • 时间复杂度,O(n)
    • 循环n次
  • 空间复杂度, O(1)
    • 一个图,不变化,常量

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

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

相关文章

Talk | 阿里巴巴算法专家王潇斌:开箱即用的文本理解大模型

本期为TechBeat人工智能社区第538期线上Talk&#xff01; 北京时间10月18日(周三)20:00阿里巴巴算法专家—王潇斌的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “开箱即用的文本理解大模型”&#xff0c;介绍了他们提出的SeqGPT以及EcomGPT两个文…

Mysql高级——锁(1)

锁 1. 概述 在数据库中&#xff0c;除传统的计算资源&#xff08;如CPU、RAM、I/O等&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。为保证数据的一致性&#xff0c;需要对并发操作进行控制&#xff0c;因此产生了锁。同时锁机制也为实现MySQL的各个隔…

软件定义存储不能打?这家成立刚三年的公司问鼎全球存储性能榜

软件定义存储&#xff08;Software Defined Storage&#xff0c;简称SDS&#xff09;在性能层面不能打&#xff1f;这恐怕是当前大多数人固有的认知。 如今&#xff0c;这种认知要被彻底打破了。日前&#xff0c;在存储性能委员会&#xff08;Storage Performance Council&…

头歌平台——C文件操作

第1关&#xff1a;使用FILE结构操作文本文件 任务描述 本关要求编写函数ext\fractDigit&#xff0c;该函数从已有的当前目录下的文件a.txt中读取并解析出其中的数值&#xff0c;并将结果写到当前目录下的文件b.txt中。 其中&#xff1a;文件a.txt中包含各种字符&#xff0c;…

一篇文章解密如何轻松实现移动应用的电子和手绘PDF签名功能!

对PDF文件签名是移动设备上越来越普遍的使用需求&#xff0c;本文将描述自动生成/“手绘”签名与如何使用DevExpress Office File API组件来实现在.NET MAUI应用程序中快速合并签名/签名支持之间的区别。 DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员…

C# Onnx Yolov8 Detect 戴口罩检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace Onnx…

如何通过命令行进入到mysql?

如何通过命令行进入到mysql&#xff1f; 首先进入到C盘mysql安装目录的bin文件夹&#xff0c;然后在这个文件夹下打开命令行窗口&#xff0c;如下图&#xff1a; 接着输入进入命令mysql -u root -p如下图&#xff1a; 可以发现输入连接命令之后需要让你输入mysql连接密码&am…

层序中序还原二叉树

题目&#xff1a; 样例&#xff1a; 输入 6 0 2 5 1 4 3 1 2 4 0 5 3 输出 0 2 1 4 5 3 思路&#xff1a; 这道题&#xff0c;核心思想就是 结合 层序遍历的性质&#xff0c;根据 中序来判断左右孩子是否存在。 前中后序的遍历实现&#xff0c;主要都是 递归的形式实现遍历…

如何使用Python给图片添加水印

目录 一、安装Pillow库 二、导入Pillow库和需要用到的模块 三、添加水印 四、调用函数并设置参数 五、需要注意的方面 总结 在Python中&#xff0c;我们可以使用Pillow库来处理图像&#xff0c;包括添加水印。Pillow是Python中最流行的图像处理库之一&#xff0c;它支持多…

Android中使用Glide加载圆形图像或给图片设置指定圆角

一、Glide加载圆形头像 效果 R.mipmap.head_icon是默认圆形头像 ImageView mImage findViewById(R.id.image);RequestOptions options new RequestOptions().placeholder(R.mipmap.head_icon).circleCropTransform(); Glide.with(this).load("图像Uri").apply(o…

canvas画布绘制线条样式:粗细,圆角,拐角等

线条的粗线 lineWidth是改变线条的粗线的&#xff0c;默认是一个像素&#xff1a; context.beginPath(); context.moveTo(20, 50); context.lineTo(280, 50); context.lineWidth1; context.stroke();// 如果这里没有beginPath 你猜猜这三条线的宽度分别是多少 context.beginP…

分享一下微信投票小游戏怎么做

微信投票小游戏是一种非常有趣和互动的社交体验&#xff0c;可以促进用户参与和互动&#xff0c;同时也可以为企业或个人带来很多好处。下面我们将探讨如何制作一个微信投票小游戏&#xff0c;以及如何为主题写作一篇文章。 一、确定游戏目的和主题 首先&#xff0c;我们需要确…

AWS Lambda – 函数版本,别名,API网关,CodeDeploy协同

Hello大家好&#xff0c;我们今天继续讨论AWS Lambda的内容。 Lambda函数的版本 Lambda函数的版本和别名是辅助资源&#xff0c;我们可以通过创建这些资源管理函数的部署和调用。 首先&#xff0c;让我们来看一下Lambda 函数版本的概念。您可以使用版本来管理函数的部署。例…

汽车屏类产品(三):抬头显示Head-Up Display(HUD)

前言 你的下一台车,一定要考虑加装一个HUD。 汽车抬头显示器或汽车抬头显示器(也称为汽车HUD)是任何透明的显示器,它可以在汽车中显示数据,而不需要用户将视线从平时的视角移开。这个名字的由来源于飞行员能够在头部“向上”并向前看的情况下查看信息,而不是向下倾斜查…

Unity3D 在做性能优化时怎么准确判断是内存、CPU、GPU瓶颈详解

Unity3D是一款广泛应用于游戏开发的跨平台游戏引擎&#xff0c;但在开发过程中&#xff0c;我们经常会遇到性能瓶颈问题&#xff0c;如内存、CPU和GPU瓶颈。本文将详细介绍在Unity3D中如何准确判断和解决这些瓶颈问题&#xff0c;并给出相应的技术详解和代码实现。 对惹&#…

干式电抗器的尺寸和重量对系统有什么影响?

干式电抗器的尺寸决定了它在系统中所占的空间大小&#xff0c;较大尺寸的电抗器需要更多的安装空间&#xff0c;可能会增加系统的体积和复杂性。干式电抗器的重量对系统的负荷和支撑结构有影响&#xff0c;较大重量的电抗器可能需要更强大的支撑结构和更稳固的安装方式&#xf…

若要对多态类进行深拷贝,应使用虚函数的clone,而不是公开的拷贝构造赋值

拷贝一个多态类可能会导致切片问题&#xff0c;为了解决这个问题&#xff0c;应覆盖一个虚clone函数&#xff0c;让他根据实际类型进行复制并返回一个到新对象的所有权的指针&#xff08;std::unique_ptr&#xff09;,在派生类&#xff0c;通过使用所谓的协变返回类型来返回派生…

2023年中国婴童护肤发展概况及趋势分析:婴童功能护肤产品成为新趋势[图]

我国婴童护肤行业相关法律法规逐步完善&#xff0c;推动儿童化妆品的生产与研发&#xff0c;降低消费者购买决策消耗与担忧&#xff1b;2021年10月发布的《儿童化妆品监督管理规定》明确规定儿童化妆品配方设计应当遵循功效必需原则。总的来说&#xff0c;各项政策助力跨境婴童…

为修复各种问题,iOS 17.1应运而生,那么它到底解决什么问题或带来什么功能呢

iOS 17即将进行第一次重大更新&#xff0c;iOS 17.1的候选版本现在掌握在开发人员和测试人员手中。这通常是即将全面释放的迹象。 事实上&#xff0c;我们对iOS 17.1更新何时应该停止有一个很好的想法&#xff0c;这要归功于法国监管机构的一份声明&#xff0c;该声明称即将对…