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

48 阅读3分钟

题目:版本号比较

问题描述

在某个项目中,每个版本都用版本号标记,由一个或多个修订号组成,修订号之间由点号.分隔。每个修订号可能有多位数字,并且可能会包含前导零。你需要根据两个版本号 version1 和 version2,判断哪个版本更新,或者它们是否相同。

例如,2.5.33 和 0.1 都是有效的版本号。

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

你需要根据以下规则返回比较结果:

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

好的,让我们来详细分析一下这道题的解题思路。

问题理解

我们需要比较两个版本号 version1 和 version2,判断哪个版本更新,或者它们是否相同。版本号由一个或多个修订号组成,修订号之间由点号 . 分隔。每个修订号可能有多位数字,并且可能会包含前导零。

解题思路

  1. 分割版本号:首先,我们需要将版本号按照点号 . 分割成修订号列表。例如,"1.0.1" 分割后得到 ["1", "0", "1"]
  2. 补齐修订号:由于两个版本号的修订号数量可能不同,我们需要在比较时将较短的版本号缺失的部分补为 0。例如,"1.0" 和 "1.0.0" 在比较时,"1.0" 需要补齐为 "1.0.0"
  3. 逐个比较修订号:从左到右依次比较修订号。忽略每个修订号的前导零,直接比较修订号对应的整数值。如果其中一个修订号大于另一个,则可以立即得出比较结果。
  4. 返回结果:如果所有修订号都相等,则返回 0;如果 version1 的某个修订号大于 version2 的对应修订号,则返回 1;如果 version1 的某个修订号小于 version2 的对应修订号,则返回 -1

代码:

def solution(version1, version2):
    v1=version1.split(".")
    v2=version2.split(".")
    
    for i in range(max(len(v1),len(v2))):
        if i<=len(v1)-1:
            n1=int(v1[i])
        else:
            n1=0

        if i<=len(v2)-1:
            n2=int(v2[i])
        else:
             n2=0

        if  n1 > n2 :
            return 1
        elif n1 < n2:
            return -1
        else:
            continue
    return 0

        

if __name__ == "__main__":
    # Add your test cases here

    print(solution("0.1", "1.1") == -1)
    print(solution("1.0.1", "1") == 1)
    print(solution("7.5.2.4", "7.5.3") == -1)
    print(solution("1.0", "1.0.0") == 0)

注意事项:

处理越界:在访问 v1[i] 或 v2[i] 之前,先检查 i 是否在 v1 或 v2 的长度范围内。如果不在,则默认补 0

测试样例

样例1:

输入:version1 = "0.1" , version2 = "1.1"
输出:-1

样例2:

输入:version1 = "1.0.1" , version2 = "1"
输出:1

样例3:

输入:version1 = "7.5.2.4" , version2 = "7.5.3"
输出:-1

样例4:

输入:version1 = "1.0" , version2 = "1.0.0"
输出:0