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

103 阅读2分钟

引言

在软件开发和版本管理中,版本号的比较是一个常见且重要的任务。版本号通常由一系列由点号分隔的修订号组成,每个修订号可能包含多位数字,并且可能带有前导零。在这篇博客中,我们将探讨如何根据版本号判断哪个版本更新,或者它们是否相同,并提供一个Python实现来解决这个问题。

问题描述

给定两个版本号version1version2,我们需要根据以下规则判断它们的相对大小:

  1. 从左到右依次比较它们的修订号。

  2. 忽略每个修订号的前导零,直接比较修订号对应的整数值。

  3. 如果其中一个版本没有足够的修订号,缺失部分默认补为0。

  4. 根据比较结果返回:

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

解题思路

为了解决这个问题,我们可以采取以下步骤:

  1. 分割版本号:将版本号字符串按照点号分割成修订号列表。
  2. 补齐修订号:使两个版本号的修订号列表长度相同,较短的列表用0补齐。
  3. 逐个比较:从左到右逐个比较修订号的整数值,一旦找到不相等的修订号,即可确定版本号的大小关系。
  4. 处理相等情况:如果所有修订号都相等,则版本号相同。

Python实现

下面是一个简洁而高效的Python函数,用于比较两个版本号:

	def compare_version(v1, v2):
	    v1_parts = [int(part) for part in v1.split('.')]
	    v2_parts = [int(part) for part in v2.split('.')]
	    # 补齐较短的修订号列表
	    while len(v1_parts) < len(v2_parts):
	        v1_parts.append(0)
	    while len(v2_parts) < len(v1_parts):
	        v2_parts.append(0)
	    # 逐个比较修订号
	    for p1, p2 in zip(v1_parts, v2_parts):
	        if p1 > p2:
	            return 1
	        elif p1 < p2:
	            return -1
	    # 版本号相同
	    return 0

代码解释

  1. 分割版本号:使用split('.')方法将版本号字符串分割成修订号列表,并使用map(int, ...)将修订号转换为整数。
  2. 补齐修订号列表:计算两个修订号列表的最大长度,并用0补齐较短的列表。
  3. 逐个比较修订号:使用for循环逐个比较修订号的整数值,一旦找到不相等的修订号,即返回对应的结果。
  4. 处理相等情况:如果循环结束且没有找到不相等的修订号,则返回0表示版本号相同。