iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
Mobile Development

30天用 Swift 解 LeetCode 問題系列 第 28

Day 28 - 9. Palindrome Number - 解法與複雜度分析 - LeetCode in Swift

  • 分享至 

  • xImage
  •  

hero

基本資訊

題意

若傳入的數字為回文,就回傳 true

想法

只比較一半:

  1. 原始數字在走訪途中不斷除以 10
  2. 透過 10 的餘數運算到裝出一個數字直到 x 開始小於新的數值

是否等於

  1. 當偶數位數時直接比較
  2. 當基數位數時,將反轉的數值除以十,消除正中間的數值再比較

程式碼

class Solution {
    func isPalindrome(_ x: Int) -> Bool {
        // Edge cases or special cases
        if x == 0 { return true }
        if x < 0 || x % 10 == 0 { return false }

        var x = x
        var reversed = 0

        // Routines
        // 組出反轉的數值
        while x > reversed {
            let digit = x % 10
            x = x / 10
            reversed = reversed * 10 + digit
        }

        // 比較兩者
        return x == reversed || x == reversed / 10
    }
}

執行結果

  • Runtime: 14 ms (beats 97.89%)
  • Memory Usage: 13.9 MB (Beats 55.65%)

複雜度分析

令 n 為數字的位數

Big O 說明
時間複雜度 O(n) 雖然只有走訪一半為 O(n/2),但是取最高項仍為 O(n)
空間複雜度 O(1) 變數宣告為常數個

結語

以上,就是今天的 LeetCode in Swift ,

如果有什麼問題和回饋歡迎留言一起討論,今天就到這裡,明天見!


上一篇
Day 27 - 367. Valid Perfect Square - 解法與複雜度分析 - LeetCode in Swift
下一篇
Day 29 - 13. Roman to Integer - 解法與複雜度分析 - LeetCode in Swift
系列文
30天用 Swift 解 LeetCode 問題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言