天天看點

LeetCode第165題—比較版本号—Python實作LeetCode第165題—比較版本号

title: LeetCode No.165

categories:

  • OJ
  • LeetCode

tags:

  • Programing
  • LeetCode
  • OJ

LeetCode第165題—比較版本号

最近科研有點忙,兩天可能才更新一下。www

自己代碼的開源倉庫:click here 歡迎Star和Fork 😃

題目描述

給你兩個版本号 version1 和 version2 ,請你比較它們。

版本号由一個或多個修訂号組成,各修訂号由一個 ‘.’ 連接配接。每個修訂号由 多位數字 組成,可能包含 前導零 。每個版本号至少包含一個字元。修訂号從左到右編号,下标從 0 開始,最左邊的修訂号下标為 0 ,下一個修訂号下标為 1 ,以此類推。例如,2.5.33 和 0.1 都是有效的版本号。

比較版本号時,請按從左到右的順序依次比較它們的修訂号。比較修訂号時,隻需比較 忽略任何前導零後的整數值 。也就是說,修訂号 1 和修訂号 001 相等 。如果版本号沒有指定某個下标處的修訂号,則該修訂号視為 0 。例如,版本 1.0 小于版本 1.1 ,因為它們下标為 0 的修訂号相同,而下标為 1 的修訂号分别為 0 和 1 ,0 < 1 。

傳回規則如下:

如果 version1 > version2 傳回 1,

如果 version1 < version2 傳回 -1,

除此之外傳回 0。

示例 1:

輸入:version1 = "1.01", version2 = "1.001"
輸出:0
解釋:忽略前導零,"01" 和 "001" 都表示相同的整數 "1"
示例 2:

輸入:version1 = "1.0", version2 = "1.0.0"
輸出:0
解釋:version1 沒有指定下标為 2 的修訂号,即視為 "0"
示例 3:

輸入:version1 = "0.1", version2 = "1.1"
輸出:-1
解釋:version1 中下标為 0 的修訂号是 "0",version2 中下标為 0 的修訂号是 "1" 。0 < 1,是以 version1 < version2
示例 4:

輸入:version1 = "1.0.1", version2 = "1"
輸出:1
示例 5:

輸入:version1 = "7.5.2.4", version2 = "7.5.3"
輸出:-1
 

提示:

1 <= version1.length, version2.length <= 500
version1 和 version2 僅包含數字和 '.'
version1 和 version2 都是 有效版本号
version1 和 version2 的所有修訂号都可以存儲在 32 位整數 中
           

代碼

#
# @lc app=leetcode.cn id=165 lang=python
#
# [165] 比較版本号
#

# @lc code=start
class Solution(object):
    def compareVersion(self, version1, version2):
        """
        用split劃分 轉換為int 比較即可
        :type version1: str
        :type version2: str
        :rtype: int
        """
        com1 = version1.split('.')
        com2 = version2.split('.')
        # 排除特殊情況
        if len(com1) != len(com2):
            # 單獨處理 1.0 1.0.0的情況
            if len(com1) > len(com2):
                for i in range(len(com2)):
                    if int(com1[i]) > int(com2[i]):
                        return 1
                    elif int(com1[i]) < int(com2[i]):
                        return -1
                for i in range(len(com2), len(com1)):
                    if int(com1[i]) != 0:
                        return 1
                return 0
            else:
                for i in range(len(com1)):
                    if int(com1[i]) > int(com2[i]):
                        return 1
                    elif int(com1[i]) < int(com2[i]):
                        return -1
                for i in range(len(com1), len(com2)):
                    if int(com2[i]) != 0:
                        return -1
                return 0

        # 長度相同的情況
        for i in range(len(com1)):
            if int(com1[i]) > int(com2[i]):
                return 1
            elif int(com1[i]) < int(com2[i]):
                return -1
            else:
                continue
        return 0
# @lc code=end