题目
难度:★★☆☆☆
类型:数组
方法:遍历
比较两个版本号 version1 和 version2。
如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。
你可以假设版本字符串非空,并且只包含数字和 . 字符。
. 字符不代表小数点,而是用于分隔数字序列。
例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。
你可以假设版本号的每一级的默认修订版号为 0。例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号分别为 3 和 4。其第三级和第四级修订号均为 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.01", version2 = "1.001"
输出:0
解释:忽略前导零,“01” 和 “001” 表示相同的数字 “1”。
示例 5:
输入:version1 = "1.0", version2 = "1.0.0"
输出:0
解释:version1 没有第三级修订号,这意味着它的第三级修订号默认为 “0”。
解答
class Solution:
def compareVersion(self, version1, version2):
def split_and_2_int(lst):
"""
将字符串按照“.”分割,并将每部分转成数字
:param lst:
:return:
"""
lst = lst.split('.')
return [int(n) for n in lst]
def just_two_lists(lst1, lst2):
"""
如果两个数字列表长度不一,需要将短一点的列表末尾补零,让它们长度相等
:param lst1:
:param lst2:
:return:
"""
l1, l2 = len(lst1), len(lst2)
if l1 > l2:
lst2 += [0] * (l1-l2)
elif l1 < l2:
lst1 += [0] * (l2-l1)
return lst1, lst2
def compare_version_lists(v1_lst, v2_lst):
"""
比较版本号列表,从高位到底位逐位比较,根据情况判断大小。
:param v1_lst:
:param v2_lst:
:return:
"""
for v1, v2 in zip(v1_lst, v2_lst):
if v1 > v2:
return 1
elif v1 < v2:
return -1
return 0
# 预处理版本号
version1, version2 = just_two_lists(split_and_2_int(version1), split_and_2_int(version2))
return compare_version_lists(version1, version2)
如有疑问或建议,欢迎评论区留言~