↓快轉到主要內容
  1. LeetCode/

LeetCode 165: Compare Version Numbers

·1 分鐘· ·
LeetCode Medium Two-Pointers String
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: medium 第一次嘗試:2022-11-19

  • 提交紀錄:Accepted(一次通過)

解題思路
#

用 . 切開後每一段轉成 int(前導零自然消失),兩個版本各一個指標逐段比較(Two Pointers 模板二)。比較短的那邊缺少的段當作 0,所以 1.0 和 1 相同。

我的解法
#

class Solution:
    def compareVersion(self, version1: str, version2: str) -> int:
        a = list(map(int, version1.split(".")))
        b = list(map(int, version2.split(".")))
        for i in range(max(len(a), len(b))):
            x = a[i] if i < len(a) else 0
            y = b[i] if i < len(b) else 0
            if x != y:
                return 1 if x > y else -1
        return 0

複雜度
#

時間 O(n + m),空間 O(n + m)。

要特別避免的錯誤
#

  • 要轉成整數比,"01" 和 "1" 相同。
  • 長度不同時缺的段補 0,不是直接判定比較長的比較大。

面試口說整理
#

我用點切開,每段轉成整數,逐段比較,比較短的版本缺的段當成 0,第一個不同的段決定結果。時間 O(n + m)。

相關文章

LeetCode 151: Reverse Words in a String
·1 分鐘
LeetCode Medium Two-Pointers String
LeetCode 151 解題筆記:split() 不帶參數會把連續空白當成一個分隔,也會去掉頭尾空白;反轉後用一個空白接起來
LeetCode 647: Palindromic Substrings
·1 分鐘
LeetCode Medium Two-Pointers String Dynamic-Programming
LeetCode 647 解題筆記:中心擴展,每擴展成功一次就是一個回文子字串
LeetCode 5: Longest Palindromic Substring
·1 分鐘
LeetCode Medium Two-Pointers String Dynamic-Programming Manacher
LeetCode 5 解題筆記:中心擴展,每個位置當奇數和偶數長度的中心往外擴;區間 DP 的話 i 要從大到小
LeetCode 142: Linked List Cycle II
·1 分鐘
LeetCode Medium Hash-Table Linked-List Two-Pointers Floyds-Cycle-Finding-Algorithm
LeetCode 142 解題筆記:快慢指針相遇後,一個回到 head,兩個都一次一步,再相遇的地方就是環的入口
LeetCode 61: Rotate List
·1 分鐘
LeetCode Medium Linked-List Two-Pointers
LeetCode 61 解題筆記:先算長度並接成環,k %= n,從頭走 n - k - 1 步找到新的尾巴再斷開
LeetCode 942: DI String Match
·1 分鐘
LeetCode Easy Array Two-Pointers String Greedy
LeetCode 942 解題筆記:兩個指標分別指向還沒用的最小值和最大值,遇到 I 放最小、遇到 D 放最大