版本号比较
问题描述
在某个项目中,每个版本都用版本号标记,由一个或多个修订号组成,修订号之间由点号.分隔。每个修订号可能有多位数字,并且可能会包含前导零。你需要根据两个版本号 version1 和 version2,判断哪个版本更新,或者它们是否相同。
例如,2.5.33 和 0.1 都是有效的版本号。
当比较两个版本时,从左到右依次比较它们的修订号。忽略每个修订号的前导零,直接比较修订号对应的整数值。如果其中一个版本没有足够的修订号,缺失部分默认补为0。
你需要根据以下规则返回比较结果:
- 如果
version1 > version2,返回1。 - 如果
version1 < version2,返回-1。 - 如果两个版本相等,返回
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
代码:
def solution(version1, version2):
# 将版本号字符串分割成列表
v1 = version1.split(".")
v2 = version2.split(".")
# 将列表中的字符串转换为整数列表
v1 = [int(part) for part in v1]
v2 = [int(part) for part in v2]
# 将两个版本号列表长度对齐,不足的地方补0
max_length = max(len(v1), len(v2))
v1 += [0] * (max_length - len(v1))
v2 += [0] * (max_length - len(v2))
# 比较两个版本号
for i in range(max_length):
if v1[i] > v2[i]:
return 1
elif v1[i] < v2[i]:
return -1
# 如果所有对应的数字都相等,则版本号相等
return 0
if __name__ == "__main__":
# 测试用例
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)
代码解读:
这段Python代码定义了一个函数 solution,用于比较两个版本号字符串 version1 和 version2 的大小。下面是对代码的详细解读:
-
函数定义:
def solution(version1, version2):定义了一个名为solution的函数,接受两个参数version1和version2,它们都是字符串类型的版本号。
-
分割版本号:
v1 = version1.split(".")和v2 = version2.split("."):这两行代码使用split方法将版本号字符串按照点(.)分割成列表。例如,"1.2.3"会被分割成["1", "2", "3"]。
-
转换为整数列表:
v1 = [int(part) for part in v1]和v2 = [int(part) for part in v2]:这两行代码使用列表推导式将分割后的字符串列表转换为整数列表。
-
对齐版本号长度:
max_length = max(len(v1), len(v2)):计算两个版本号列表的长度,取最大值。v1 += [0] * (max_length - len(v1))和v2 += [0] * (max_length - len(v2)):如果一个版本号列表的长度小于最大长度,就在其后面补零,直到两个列表长度相等。这样做是为了确保在比较时,每个版本号的每个部分都能对应上。
-
比较版本号:
for i in range(max_length):循环遍历每个版本号的部分。if v1[i] > v2[i]:如果version1的当前部分大于version2的当前部分,返回1。elif v1[i] < v2[i]:如果version1的当前部分小于version2的当前部分,返回-1。
-
版本号相等:
return 0:如果所有对应的部分都相等,返回0,表示两个版本号相等。
-
主程序:
if __name__ == "__main__":这部分代码在直接运行该脚本时执行。print(solution("0.1", "1.1") == -1)等四行代码是测试用例,用于验证函数的正确性。每个print语句都检查solution函数的返回值是否符合预期。
这个函数的关键在于正确地处理和比较两个可能长度不同的版本号字符串,通过补零确保它们长度相同,然后逐个比较每个部分的值。这种方法简单且高效,能够正确地比较大多数版本号。