165. 比较版本号(Python)

题目

难度:★★☆☆☆
类型:数组
方法:遍历

传送门

比较两个版本号 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)

如有疑问或建议,欢迎评论区留言~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容