版本号比较——问题详解及代码解析

70 阅读2分钟

问题描述

假设在一个项目中,每个版本都用版本号来标记,版本号由一个或多个修订号组成,这些修订号之间由点号(.)分隔。每个修订号可以包含多位数字,并且可能有前导零。给定两个版本号 version1version2,我们需要编写一个函数来判断哪个版本更新,或者它们是否相同。

具体来说,比较两个版本号时,应从左到右依次比较它们的修订号。忽略每个修订号的前导零,直接比较修订号对应的整数值。如果其中一个版本没有足够的修订号,缺失的部分默认补为0。

根据比较的结果,函数应该返回:

  • 如果 version1 > version2,返回 1。
  • 如果 version1 < version2,返回 -1。
  • 如果两个版本相等,返回 0。

解决方案

下面是一个使用Python实现的解决方案,该解决方案能够高效地完成上述任务:

python
深色版本
def solution(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

代码解析

  1. 分割版本号:首先,我们使用 split('.') 方法将输入的字符串形式的版本号按照点号分割成修订号的列表。
  2. 获取最大长度:为了能够正确处理不同长度的版本号,我们需要找到两个列表中较长的那个,这样可以在必要时为较短的列表补充0。
  3. 逐个比较:接下来,我们遍历两个列表的每一个修订号,将字符串转换为整数进行比较。如果发现任何差异,立即返回相应的结果。
  4. 默认返回:如果循环结束后没有发现差异,说明两个版本号完全相同,此时返回0表示两个版本相等。