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