165. 比较版本号

2023-11-02

165. 比较版本号

题目描述

给你两个版本号 version1version2 ,请你比较它们。

版本号由一个或多个修订号组成,各修订号由一个 '.' 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.330.1 都是有效的版本号。

比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1 和修订号 001 相等 。如果版本号没有指定某个下标处的修订号,则该修订号视为 0 。例如,版本 1.0 小于版本 1.1 ,因为它们下标为 0 的修订号相同,而下标为 1 的修订号分别为 010 < 1

返回规则如下:

  • 如果 version1 > version2 返回 1
  • 如果 version1 < version2 返回 -1
  • 除此之外返回 0

示例 1:

输入:version1 = "1.01", version2 = "1.001"
输出:0
解释:忽略前导零,"01" 和 "001" 都表示相同的整数 "1"

示例 2:

输入:version1 = "1.0", version2 = "1.0.0"
输出:0
解释:version1 没有指定下标为 2 的修订号,即视为 "0"

示例 3:

输入:version1 = "0.1", version2 = "1.1"
输出:-1
解释:version1 中下标为 0 的修订号是 "0",version2 中下标为 0 的修订号是 "1" 。0 < 1,所以 version1 < version2

示例 4:

输入:version1 = "1.0.1", version2 = "1"
输出:1

示例 5:

输入:version1 = "7.5.2.4", version2 = "7.5.3"
输出:-1

提示:

  • 1 <= version1.length, version2.length <= 500

  • version1version2 仅包含数字和 '.'

  • version1version2 都是 有效版本号

  • version1version2 的所有修订号都可以存储在 32 位整数


题解:

字符串模拟。

分别使用两个指针 p1p2 指向两个字符串,分别向后遍历,遇到 . 时停止,比较两个字符中 . 前的数字大小。

时间复杂度: O ( m a x ( n , m ) ) O(max(n, m)) O(max(n,m))

额外空间复杂度: O ( 1 ) O(1) O(1)

class Solution {
public:
    int compareVersion(string version1, string version2) {
        int len1 = version1.size(), len2 = version2.size();
        int p1 = 0, p2 = 0;
        int num1 = 0, num2 = 0;
        while ( p1 < len1 || p2 < len2 ) {
            while ( p1 < len1 && version1[p1] != '.' )
                num1 = num1 * 10 + (version1[p1++] & 15);
            while ( p2 < len2 && version2[p2] != '.' )
                num2 = num2 * 10 + (version2[p2++] & 15);
            if ( num1 < num2 ) return -1;
            if ( num1 > num2 ) return 1;
            num1 = num2 = 0;
            ++p1, ++p2;
        }
        return 0;
    }
};
/*
时间:0ms,击败:100.00%
内存:6MB,击败:90.76%
*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

165. 比较版本号 的相关文章

  • 刷脸支付有可以大规模落地的商用前景

    科技的高频创新牵引着公众行为发生着快速切换与升级 当人们还沉浸在扫码支付的便利场景中时 刷脸支付作为一种全新的支付方式已不期而至 同时 针对刷脸支付可能大规模落地商用的前景 围绕其便捷性与安全性所展开的舆论博弈也不断被推向高潮 目前刷脸支付
  • vue.config.js中的配置

    兼容性问题 const defineConfig require vue cli service module exports defineConfig node modules里的依赖默认是不会编译的 会导致es6语法在ie中的语法报错
  • 今天第一次用dubbo写一个提供者,消费者,记录一下

    随笔 自己记录一下 一 先创建一个maven项目 dubbo pom 里面包含两个module dubbo api 和 dubbo consumer 如下 dubbo pom xml
  • 嵌入式开发(S5PV210)——u-boot中如何确定启动方式

    1 嵌入式设备确认启动方式 设备确认启动方式分为硬件方式和软件方式 硬件方式是通过芯片某几个引脚的高低电平来决定启动方式 软件方式就是通过代码设置来决定启动方式 1 硬件方式 比如S5PV210芯片 通过拨码开关去设置芯片引脚的高低电平来设

随机推荐

  • 正则表达式判断字符串是否包含中文

    正则表达式通常被用来检索 替换那些符合某个模式 规则 的文本 Regex regex new Regex u4e00 u9fa5 string str 48445helloWorld regex IsMatch str ToString b
  • windows上的neo4j 数据迁移

    需求 把windowsA上的neo4j中graph库相关数据 同步到 windowsB上的neo4j 上 解答 步骤如下 1 首先把windowsA windowsB上的neo4j服务停掉 2 进入windowsA上的neo4j的data目
  • Python生成器generator之next和send运行流程

    http blog csdn net pfm685757 article details 49924099 运行流程 yield from iterable本质上等于for item in iterable yield item的缩写版 转
  • 安装visio64位,无法安装,需要卸载32位问题

    最近买了新电脑 在准备安装visio的时候出现了这个问题 只需要下载一个注册表自动清理器 链接 https pan baidu com s 1eNit u1dLAYC3BBL9u1auA 提取码 kho7 下载后直接打开 点击 一键解决此问
  • 创建docker容器时设置hosts内容

    方式1 在使用docker run运行一个新的容器的时候 通过参数 add host来添加域名和IP信息到容器的 etc hosts文件中 例如 docker run add host hostname 111 111 111 1 name
  • 在Mac OS中配置CMake的详细图文教程

    CMake是一个比make更高级的跨平台的安装 编译 配置工具 可以用简单的语句来描述所有平台的安装 编译过程 并根据不同平台 不同的编译器 生成相应的Makefile或者project文件 本文主要介绍在Mac OSX上安装配置CMake
  • 在html中如何使div在页面中居中显示

    在html中如何使div在页面中居中显示 最近无聊中又再温习了下html 发现好多东西都忘了 尝试着写了一个html网页 结果就连div如何在页面中居中显示都查了好久才弄出来 其实我不知道为什么这样可以实现 因为css还没仔细研究过 等我参
  • watermark前端js盲水印添加方法

    1 引入js 2 实例化对象
  • java获取一个文件的md5码

    什么是文件的MD5码 MD5信息摘要算法 英语 MD5 Message Digest Algorithm 一种被广泛使用的密码散列函数 可以产生出一个128位 16字节 的散列值 hash value 用于确保信息传输完整一致 每个文件对应
  • [知识蒸馏]

    知识蒸馏目的 需要关注的是上图的 attention transfer channel wise knowledge distillation for dense prediction ppt来源于 精读AI论文 知识蒸馏 哔哩哔哩 bil
  • 在计算机中安装Arch Linux

    Arch Linux是一个优秀的linux操作系统 其优点是滚动发行 软件包比较新 并且可以深度可定制 缺点是由于深度可定制 所以开始安装的时候只有命令行可用 对于linux新手来说会有一些难度 我也是练习安装了好多次 才逐渐从安装过程中学
  • Java比较器(Comparator接口)

    Comparator接口的使用 定制排序 1 当元素的类型没有实现java lang Comparable接口而又不方便修改代码 或者实现了java lang Comparable接口的排序规则不适合当前的操作 那么可以考虑使用 Compa
  • go语言中的读写锁以及协程通信

    0 需求分析 在一个读操作远大于写操作的时候 用读写锁 读写锁与互斥锁的运行时长相比 两个goroutine间的通信 写goroutine写完以后通过channel发一个消息给读goroutine 读goroutine收到以后开启200个并
  • Anaconda常用操作(亲测有效果)

    文章目录 Anaconda简绍 一 Anaconda下载安装 二 常用命令 1 创建自己的虚拟环境 2 查看所有的环境 3 切换环境 4 退出环境 5 卸载环境 总结 Anaconda简绍 Conda是一个开源的包 环境管理器 可以用于在同
  • CentOS下安装AMP

    1 安装mysql shell gt groupadd mysql shell gt useradd g mysql mysql shell gt tar zxvf mysql tar gz shell gt cd mysql VERSIO
  • GD32F4xx适配OpenHarmony问题踩坑记录

    1 时钟配置导致的串口乱码 现象描述 最新在适配GD32产品时 发现使用外部晶振时调试串口输出内容会出现乱码 使用内部晶振则不会出现这个问题 配置如下所示 后来研究了半天 发现GD32除了配置system gd32f4xx h中的时钟倍频宏
  • (已实测解决)Intel Optane(tm) Memory Pinning 无法加载DLLiaStorAfsServiceApi.dll:找不到指定模块。是怎么回事如何解决

    Intel Optane Memory Pinning 无法加载DLL iaStorAfsServiceApi dll 找不到指定模块 异常来自HRESULT 0x8007007E 更新windows10后 发现打开文件夹时总是弹出一个窗口
  • explicit和QObject的禁止拷贝

    常用的mainwindow h中对构造函数是这样声明的 explicit MainWindow QWidget parent 0 为什么有个explicit 其实是为了禁止构造函数的隐式转换 构造函数如果只有一个参数 那么存在一个隐式转换
  • 深度解析“区块链+物联网”与新基建

    根据国家发改委对 新基建 的界定 区块链属于新技术基础设施 物联网属于通信网络基础设施 同属于 新基建 的代表 区块链与物联网之间可能擦出什么样的火花 需要哪些软硬件支持 这是本文要讨论的问题 区块链 物联网 的核心问题 区块链兼有信息互联
  • 165. 比较版本号

    165 比较版本号 题目描述 给你两个版本号 version1 和 version2 请你比较它们 版本号由一个或多个修订号组成 各修订号由一个 连接 每个修订号由 多位数字 组成 可能包含 前导零 每个版本号至少包含一个字符 修订号从左到