首页 > 其他分享 >165. 比较版本号

165. 比较版本号

时间:2023-06-07 16:33:31浏览次数:50  
标签:下标 version1 version2 版本号 修订 return 165 比较

难度中等

给你两个版本号 version1 和 version2 ,请你比较它们。

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

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




class Solution:
    def compareVersion(self, version1: str, version2: str) -> int:
        v1=version1.split('.')
        v2=version2.split('.')
        n1 = len(v1)
        n2 = len(v2)
        i = 0
        
        def clean(s1):
            i = 0
            while i < len(s1) and s1[i]=='0':i+=1
            if i >= len(s1):return 0
            if s1[i:] == "":
                return 0
            return  int(s1[i:])
          
        while i < n1 or i < n2:
            ch1 = ch2 = 0
            if i<n1: ch1 = clean(v1[i])
            if i<n2: ch2 = clean(v2[i])
            if  int(ch1) > int(ch2):
                return 1
            elif int(ch1) < int(ch2):
                return -1
            else:
                i+=1
        return 0

 

标签:下标,version1,version2,版本号,修订,return,165,比较
From: https://www.cnblogs.com/zle1992/p/17463775.html

相关文章

  • 7.11 字符串比较
    demo1equalsequalsIgnoreCaseStringstrA="mldn";StringstrB="MLDN";System.out.println(strA.equals(strB));System.out.println(strA.equalsIgnoreCase(strB));//不区分大小写来比较demo2compareTo字符串大小比较,com......
  • 7.4 两种实例化方式比较
    本节课,视频讲的有点抽象。具体内容结合看书来理解看看???????demopublicclassHelloWorld{publicstaticvoidmain(String[]args){StringstrA="mldn";StringstrB=newString("mldn").intern();System.out.println(strA==strB);/......
  • Maven project 中,运行时获取某依赖的版本号
    <dependency> <groupId>cn.xs</groupId> <artifactId>qishi-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>  // D:\mvnrepository\cn\xs\qishi-api\0.0.1-SNAPSHOT\qishi-api......
  • 一键修改pom 版本号
     packagecn.zno.version;importjava.io.File;importjava.nio.charset.Charset;importcn.zno.ambi.bas.util.FileUtils;importcn.zno.ambi.bas.xml.XmlUtils;publicclassMain{publicstaticvoidmain(String[]args){if(args.length==0)......
  • 如何设计React应用程序的样式——比较不同的选项
    样式在创建具有视觉吸引力和用户友好的Web应用程序方面起着至关重要的作用。对于React应用程序,可以通过多种方式来设置组件和UI元素的样式。在本文中,我们将探讨几个流行的选项,包括纯CSS、CSS模块、CSS预处理器、TailwindCSS、CSS-in-JS库(如StyledComponents)以及预构......
  • C# 中==与Equals方法比较
    先来段代码,如下:staticvoidMain(string[]args){stringa=newstring(newchar[]{'h','e','l','l','o'});stringb=newstring(newchar[]{'h','e',&......
  • 顺序表 与 链表 的优缺点比较涅~( ̄▽ ̄)~*
    顺序表  优点是可以随机存取元素,存储密度高,结构简单;        缺点是需要一片地址连续的存储空间,不便于插入和删除元素(因为插入需要将大量的元素向后移动,删除需要将后续大量的元素向前覆盖),表的容量难以确定; 链表   优点是便于结点的插入与删除(只需要修......
  • grpc 与http比较,具有哪些优势
    更高的性能:gRPC使用ProtocolBuffers作为默认的数据序列化工具,相比于JSON等文本格式,它的编码和解码速度更快,传输的数据量更小,因此可以更快地处理大量的请求和响应。更小的带宽占用:由于使用二进制数据格式,gRPC的数据传输量比HTTP更小,因此可以降低网络传输的带宽占用。支持......
  • 商城系统比较(三款不错的java开源商城系统推荐)和其他推荐
    今天给大家分享三套github上优质的商城开源项目,排名不分先后。1、newbee-mall(新蜂商城)仓库地址:https://github.com/newbee-ltd/newbee-mall特点:springboot开发,主要针对pc端,代码设计非常简洁,没有过多的分层,非常适合初学者学习。 2、macrozheng/mall(没有中文名,不太好记)仓库地......
  • Linux下三组I/O复用函数的比较(select、poll、epoll)
        前面我们讨论了select、poll和epoll三组I/O复用系统调用,这三组系统调用都能同时监听多个文件描述符。它们将等待由timeout参数指定的超时时间,直到一个或多个文件描述符上有事件发生时返回,返回值是就绪的文件描述符的数量。返回0表示没有事件发生。现在我们从事件集、最......