题目:版本号比较
问题描述
在某个项目中,每个版本都用版本号标记,由一个或多个修订号组成,修订号之间由点号.分隔。每个修订号可能有多位数字,并且可能会包含前导零。你需要根据两个版本号 version1 和 version2,判断哪个版本更新,或者它们是否相同。
例如,2.5.33 和 0.1 都是有效的版本号。
当比较两个版本时,从左到右依次比较它们的修订号。忽略每个修订号的前导零,直接比较修订号对应的整数值。如果其中一个版本没有足够的修订号,缺失部分默认补为0。
你需要根据以下规则返回比较结果:
- 如果
version1 > version2,返回1。 - 如果
version1 < version2,返回-1。 - 如果两个版本相等,返回
0。
好的,让我们来详细分析一下这道题的解题思路。
问题理解
我们需要比较两个版本号 version1 和 version2,判断哪个版本更新,或者它们是否相同。版本号由一个或多个修订号组成,修订号之间由点号 . 分隔。每个修订号可能有多位数字,并且可能会包含前导零。
解题思路
- 分割版本号:首先,我们需要将版本号按照点号
.分割成修订号列表。例如,"1.0.1"分割后得到["1", "0", "1"]。 - 补齐修订号:由于两个版本号的修订号数量可能不同,我们需要在比较时将较短的版本号缺失的部分补为
0。例如,"1.0"和"1.0.0"在比较时,"1.0"需要补齐为"1.0.0"。 - 逐个比较修订号:从左到右依次比较修订号。忽略每个修订号的前导零,直接比较修订号对应的整数值。如果其中一个修订号大于另一个,则可以立即得出比较结果。
- 返回结果:如果所有修订号都相等,则返回
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