bilibili校招笔试题3:version判断 leetcode165 Compare Version Numbers

leetcode165 题目翻译
比较 version1 和 version2 这两个“版本号”的大小。version1 > version2 返回 1,version1 < version2 返回 -1,否则返回 0。
假定版本号字符串非空,且仅包含 符号“.”和数字。这里 符号“.”不代表小数点,而是数字串的分隔符。比如“2.5”指的是一阶版本号为2,二阶版本号为5。
这里有一个版本号排序的例子:0.1 < 1.1 < 1.2 < 13.37

思路方法
这个问题虽然简单,但很容易考虑不周,主要是:1,版本号可能有0或多个小数点;2,两个版本号小数点个数可能不一样多;3,不同位置0的含义要注意 。
比如,我觉得下面几个例子要特别注意:
1 等于 1.0 等于 1.0.000.00
1 等于 01 等于 000001
1.1 小于 1.10 小于 1.100000

思路一
版本号是分层的,所以可以将两个字符串按照“.”分割成子串数组,分层比较。为了消除每层的前导0的影响可以将每层转换为整数进行比较;当然还要考虑两个子串数组长度可能不同,可以对短的补0处理。

代码一

class Solution(object):
    def compareVersion(self, version1, version2):
        """
        :type version1: str
        :type version2: str
        :rtype: int
        """
        v1_list = version1.split('.')
        v2_list = version2.split('.')

        for i in range(0, max(len(v1_list), len(v2_list))):
            v1 = int(v1_list[i]) if len(v1_list) > i else 0
            v2 = int(v2_list[i]) if len(v2_list) > i else 0
            if v1 > v2:
                return 1
            elif v1 < v2:
                return -1
        return 0
class Solution(object):
    def compareVersion(self, version1, version2):
        """
        :type version1: str
        :type version2: str
        :rtype: int
        """
        v1_list = [int(v) for v in version1.split('.')]
        v2_list = [int(v) for v in version2.split('.')]
        max_len = max(len(v1_list), len(v2_list))
        if len(v1_list) == max_len:
            v2_list += [0]*(max_len - len(v2_list))
        else:
            v1_list += [0]*(max_len - len(v1_list))

        if v1_list != v2_list:
            return 0
        else:
            return 1 if v1_list > v2_list else -1
class Solution(object):
    def compareVersion(self, version1, version2):
        """
        :type version1: str
        :type version2: str
        :rtype: int
        """
        if version1 == version2:
            return 0

        ind_1 = version1.find('.')
        ind_2 = version2.find('.')
        part_1 = version1[0:ind_1] if ind_1 != -1 else version1
        part_2 = version2[0:ind_2] if ind_2 != -1 else version2

        if int(part_1) == int(part_2):
            remain_1 = version1[len(part_1)+1:] if version1[len(part_1)+1:] != '' else '0'
            remain_2 = version2[len(part_2)+1:] if version2[len(part_2)+1:] != '' else '0'
            return self.compareVersion(remain_1, remain_2)
        else:
            return 1 if int(part_1) > int(part_2) else -1

参考:
https://blog.csdn.net/coder_orz/article/details/51313015

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值