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

96 阅读4分钟

问题描述

在软件开发中,每个版本号通常由多个修订号组成,修订号之间用点号(.)分隔。我们需要比较两个版本号,判断哪个版本更新,或者它们是否相同。

输入格式

  • version1version2 是有效的版本号字符串,例如 "2.5.33" 和 "0.1"。

1. 版本号的结构

版本号一般由多个整数构成,每个整数称为修订号。这些修订号从左到右表示不同的版本层级:

  • 第一层(主版本号)表示重大版本更新,通常伴随着重大变化或新特性。
  • 第二层(次版本号)通常表示相对较小的更新,比如新特性或功能的增强。
  • 第三层(修订号)通常用于修复错误或进行小幅度改动。

此外,版本号可能还会包含前导零,例如“01.0”或“1.00”,在比较时,这些前导零需要被忽略,直接比较修订号的整数值。

2. 比较的规则

在比较两个版本号时,我们需要遵循以下规则:

  • 从左到右逐个比较修订号。如果一个版本号的修订号少于另一个版本号,那么缺失的部分应视为0。
  • 如果某个修订号大于另一个修订号,则该版本更新;反之,则该版本较旧;如果两个修订号相等,则继续比较下一个修订号。
  • 如果所有修订号都相等,则认为两个版本号是相同的。

通过这些规则,我们确保了比较的准确性和一致性。

返回值

  • 如果 version1 大于 version2,返回 1
  • 如果 version1 小于 version2,返回 -1
  • 如果两个版本号相等,返回 0

示例分析

  1. 示例1

    • 输入:version1 = "0.1"version2 = "1.1"

    • 比较过程:

      • 比较 01,结果 0 < 1,所以返回 -1
  2. 示例2

    • 输入:version1 = "1.0.1"version2 = "1"

    • 比较过程:

      • 比较 11,相等。
      • 比较 00,相等。
      • 比较 1 和缺失的 0(视为0),结果 1 > 0,返回 1
  3. 示例3

    • 输入:version1 = "7.5.2.4"version2 = "7.5.3"

    • 比较过程:

      • 比较 77,相等。
      • 比较 55,相等。
      • 比较 23,结果 2 < 3,返回 -1
  4. 示例4

    • 输入:version1 = "1.0"version2 = "1.0.0"

    • 比较过程:

      • 比较 11,相等。
      • 比较 00,相等。
      • 没有更多的修订号需要比较,返回 0

实现步骤

  1. 拆分版本号:使用 split('.') 将版本号字符串拆分为一个列表。
  2. 转换为整数:将拆分后的字符串转换为整数列表,以便进行比较。
  3. 补齐修订号:比较时处理修订号的缺失,缺失部分视为0。
  4. 逐个比较:依次比较修订号,确定最终的返回值。

完整代码

python
复制代码
def compare_versions(version1: str, version2: str) -> int:
    # 将版本号按点号分割,并转化为整数列表
    v1_parts = list(map(int, version1.split('.')))
    v2_parts = list(map(int, version2.split('.')))
    
    # 获取两个版本号的最大长度
    max_length = max(len(v1_parts), len(v2_parts))
    
    # 比较每个修订号
    for i in range(max_length):
        # 获取当前修订号,如果超出列表长度,则默认补0
        v1 = v1_parts[i] if i < len(v1_parts) else 0
        v2 = v2_parts[i] if i < len(v2_parts) else 0
        
        if v1 > v2:
            return 1
        elif v1 < v2:
            return -1
    
    # 如果所有修订号都相等,则返回0
    return 0

# 测试样例
print(compare_versions("0.1", "1.1"))       # 输出: -1
print(compare_versions("1.0.1", "1"))       # 输出: 1
print(compare_versions("7.5.2.4", "7.5.3")) # 输出: -1
print(compare_versions("1.0", "1.0.0"))     # 输出: 0

知识总结

本题的解决方案有效地实现了版本号的比较,确保了无论输入的版本号格式如何(包括前导零和不同数量的修订号),都能够准确得到比较结果。通过将版本号转换为整数并处理修订号的补齐问题,代码逻辑简洁而易于理解。这种比较方法在实际应用中非常有用,尤其是在软件版本控制、依赖管理等场景中。实现这一功能不仅提升了对版本号的理解,也帮助开发人员更好地管理和跟踪软件的不同版本。