首页 > 试题广场 >

比较版本号

[编程题]比较版本号
  • 热度指数:100212 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛客项目发布项目版本时会有版本号,比如1.02.11,2.14.4等等
现在给你2个版本号version1和version2,请你比较他们的大小
版本号是由修订号组成,修订号与修订号之间由一个"."连接。1个修订号可能有多位数字组成,修订号可能包含前导0,且是合法的。例如,1.02.11,0.1,0.2都是合法的版本号
每个版本号至少包含1个修订号。
修订号从左到右编号,下标从0开始,最左边的修订号下标为0,下一个修订号下标为1,以此类推。

比较规则:
一. 比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较忽略任何前导零后的整数值。比如"0.1"和"0.01"的版本号是相等的
二. 如果版本号没有指定某个下标处的修订号,则该修订号视为0。例如,"1.1"的版本号小于"1.1.1"。因为"1.1"的版本号相当于"1.1.0",第3位修订号的下标为0,小于1
三.  version1 > version2 返回1,如果 version1 < version2 返回-1,不然返回0.

数据范围:
version1 和 version2 的修订号不会超过int的表达范围,即不超过 32 位整数 的范围

进阶: 空间复杂度 , 时间复杂度
示例1

输入

"1.1","2.1"

输出

-1

说明

version1 中下标为 0 的修订号是 "1",version2 中下标为 0 的修订号是 "2" 。1 < 2,所以 version1 < version2,返回-1
示例2

输入

"1.1","1.01"

输出

0

说明

version2忽略前导0,为"1.1",和version相同,返回0          
示例3

输入

"1.1","1.1.1"

输出

-1

说明

"1.1"的版本号小于"1.1.1"。因为"1.1"的版本号相当于"1.1.0",第3位修订号的下标为0,小于1,所以version1 < version2,返回-1          
示例4

输入

"2.0.1","2"

输出

1

说明

version1的下标2>version2的下标2,返回1          
示例5

输入

"0.226","0.36"

输出

1

说明

226>36,version1的下标2>version2的下标2,返回1          
头像 牛客题解官
发表于 2022-04-22 11:43:56
精华题解 题目的主要信息: 给出2个版本号version1和version2,比较它们的大小 版本号是由修订号组成,修订号与修订号之间由一个"."连接 修订号可能有前导0,按从左到右的顺序依次比较它们的修订号,比较修订号时,只需比较忽略任何前导零后的整数值 如果版本号没有指定某个下标处的修订号,则该修订号视 展开全文
头像 changed.
发表于 2021-07-17 16:08:28
精华题解 方法一:分割后比较核心思想:可以将需要比较的两个版本号按拆分为块,逐块进行比较,根据比较结果进行返回。注意:可能出现两个版本号块数不同,此时将较短版本号后续块中字符视为0。图示: 核心代码: class Solution { public: //用于拆分版本号的辅助函数 void 展开全文
头像 棒棒糖🍭201906101800876
发表于 2021-07-20 13:12:53
精华题解 NC104 比较版本号 1. 分割为数组再比较 考虑到题目给出的是两个string, 而比较的是小数点中间的数字大小,所以可以按照"."将字符串切割成int数组,如图所示: 切割后,两个数组的长度可能不等,因此需要把较短的数组用0补齐,再逐位比较即可。 需要注意的实现细节: 展开全文
头像 ☞一叶一菩提☜
发表于 2022-03-14 20:26:01
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 比较版本号 * @param version1 string字符串 展开全文
头像 T_por
发表于 2021-10-13 17:05:59
首先对字符串进行切割,如果将字符串转int类型,会超出int的范围,所以直接使用字符串比较ascii码。遇到开头数字为0的,去掉前缀0,如果全为0的直接截取最后一位即可。 import java.util.*; public class Solution { /** * 代码中 展开全文
头像 -Nil-
发表于 2022-04-27 16:25:40
import ( "strings" "strconv" ) /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 比较版本号 * @param version1 string字符串 * @param version2 string 展开全文
头像 Maokt
发表于 2021-07-20 11:23:26
算法思想一:分割+遍历 解题思路: 将两个字符串按点字符分割成块,然后逐个比较这些块 如果两个版本号的块数相同,则可以有效工作。如果不同,则需要在较短字符串末尾补充相应的 .0 块数使得块数相同。 算法: 1、根据点分割两个字符串将分割的结果存储到数组中。 2、遍历 展开全文
头像 是JOKER阿
发表于 2022-04-25 22:27:08
题目解析: 比较两个版本号,版本号由“.”分隔成多个修订号,比较思路应从左向右依次进行比较,只要任意一组修订号不相等则已经可以得到结果,若相等则需要比较下一组修订号,在大多数的比较中其实并不需要将完整的版本号进行比较。 难点1: 需要处理分隔符“.”将字符串形式的版本号进行分割,分割为多组修订号 展开全文
头像 金大宝
发表于 2022-07-21 17:15:44
思路:从左到右比较等长数组值,不等长用0补齐 step1:获取最长数组的长度,确定循环次数 step2:每次循环获取值进行比较,v1>v2返回1,v1<v2返回-1 step3:如果都相等则返回0 public int compare(String  展开全文
头像 寒秋微凉
发表于 2020-09-18 11:13:22
public int compare (String version1, String version2) { // write code here String[] s1 = version1.split("[.]"); String[] s2 = ver 展开全文
头像 莫小雨so
发表于 2022-03-02 20:31:34
/**  * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可  *  * 比较版本号  * @param version1 string字符串   * @ 展开全文
头像 讲道理的豹子说这不是bug
发表于 2023-07-08 10:50:52
方法:双指针使用两个指针分别指向两个数组的头元素,分别得到两个点号之间的数字,通过比较两个数字的大小即可得到两个版本号的大小。时间复杂度:o(n)空间复杂度:o(1) class Solution { public: int compare(string version1, string 展开全文
头像 高阶发际线
发表于 2021-03-23 16:53:04
思路 1.版本号切割成数组,并且把字符串数字转成数字类型,这里有一个特别的点就是,字符串转数字的时候 '0011' 会转成 112.然后计算两个切割数组的长度,如果长度不一致,填充0直到长度一致3.然后就是比较 > < 如果等于 继续寻找知道结束 返回0 // 核心代码 var 展开全文

问题信息

上传者:牛客332641号
难度:
192条回答 11670浏览

热门推荐

通过挑战的用户

查看代码