版本号比较| 豆包MarsCode AI刷题

211 阅读3分钟

版本号比较:实现与解析

在软件开发过程中,版本控制是至关重要的。每个版本通常都会用一个版本号来标记,这个号码由一系列修订号组成,修订号之间使用点号.分隔。当需要确定两个版本之间的相对新旧时,就需要进行版本号的比较。

问题描述

给定两个版本号 version1version2,任务是比较这两个版本号以确定哪个更新,或者它们是否相同。版本号由一个或多个修订号组成,修订号可能包含前导零。比较时应忽略这些前导零,并直接比较修订号对应的整数值。如果某个版本号没有足够的修订号,则缺失的部分默认视为0。

根据比较结果,我们需要返回以下三种情况之一:

  • 如果 version1version2 新,返回 1。
  • 如果 version1version2 旧,返回 -1。
  • 如果两个版本号相同,返回 0。

示例测试

为了更好地理解这个问题,我们来看几个示例:

  • 示例1:version1 = "0.1", version2 = "1.1",输出 -1,因为 0.1 小于 1.1
  • 示例2:version1 = "1.0.1", version2 = "1",输出 1,因为 1.0.1 大于 1(即 1.0)。
  • 示例3:version1 = "7.5.2.4", version2 = "7.5.3",输出 -1,因为 7.5.2.4 小于 7.5.3
  • 示例4:version1 = "1.0", version2 = "1.0.0",输出 0,因为两者相等。

实现方法

下面是一个Python函数 compareVersion 的实现,该函数接收两个字符串参数 version1version2,并返回上述规则定义的结果。

def compareVersion(version1, version2):
    # 分割版本字符串为修订号列表
    v1_parts = version1.split('.')
    v2_parts = version2.split('.')
    
    # 计算两个版本中较长的长度
    max_length = max(len(v1_parts), len(v2_parts))
    
    # 比较每一个修订号
    for i in range(max_length):
        # 获取当前修订号,如果不存在则使用0
        v1_part = int(v1_parts[i]) if i < len(v1_parts) else 0
        v2_part = int(v2_parts[i]) if i < len(v2_parts) else 0
        
        # 比较修订号
        if v1_part > v2_part:
            return 1
        elif v1_part < v2_part:
            return -1
    
    # 如果所有修订号都相同,则返回0
    return 0

函数解析

  • 分割修订号:通过 split('.') 方法将输入的版本字符串分割成修订号列表。
  • 计算最长长度:找出两个版本号中较长的那个,以便后续可以遍历所有修订号。
  • 逐个比较修订号:对于每个修订号,将其转换为整数进行比较。如果某一方的修订号已经遍历完,则认为剩余部分为0。
  • 返回结果:一旦发现修订号不相等,立即返回相应的比较结果;如果所有修订号都相等,则最终返回0。

通过这种方式,我们可以有效地比较任何两个版本号,并得到正确的比较结果。此方法简单明了,易于理解和实现,适用于各种版本号比较的场景。