iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0

破題

這題要求我們判斷一個整數是否是迴文,換言之,它從前往後讀和從後往前讀是相同的。

跟一流的人才幹大事,享受成功進步的高級樂趣!
內推機會來啦!能與優秀的程式設計師共事,是特別痛快的事,因為厲害的工程師大神會刺激你想要迎頭趕上的上進心,尤其是一起討論解決方案時,他們會觸發你有更好的解決思維能力,彼此共同成長並且一起享受解謎與破關般的樂趣。 你一定聽得懂我在說甚麼感覺,趕快把握機會,動動手指投遞履歷吧! 立即加入「面試讀書會」,和大家一起準備面試!

https://ithelp.ithome.com.tw/upload/images/20230915/20151958nT7kgUzy4M.png 內推機會 https://ithelp.ithome.com.tw/upload/images/20230902/20151958hbhGNE7BJ4.png 加入讀書會 (邀請碼:7199)

解題思路

這題的思路是將整數的後半部分反轉,然後與前半部分比較。首先,我們排除負數和最後一位是 0 的數(除了 0 本身)。然後,我們用一個變數 revertedNumber 來存儲反轉的後半部分。當原始數字大於 revertedNumber 時,我們將原始數字除以 10,並將餘數加到 revertedNumber 上。最後,我們比較原始數字和 revertedNumber 是否相等,或者原始數字是否等於 revertedNumber 除以 10(當原始數字的位數是奇數時)。

程式

class Solution {
    fun isPalindrome(x: Int): Boolean {
        if (x < 0 || x % 10 == 0 && x != 0) return false

        var number = x
        var revertedNumber = 0

        while (number > revertedNumber) {
            revertedNumber = revertedNumber * 10 + number % 10
            number /= 10
        }

        return number == revertedNumber || number == revertedNumber / 10
    }
}

複雜度分析

  • 時間複雜度:
    https://latex.codecogs.com/svg.image?%5Cmathcal%7BO%7D(%5Clog%7B%7D%20n),其中 nx 的絕對值。我們只需要反轉 x 的一半位數,所以時間複雜度是對數級別。

  • 空間複雜度:
    On。我們只需要幾個變數來存儲原始數字和反轉的後半部分,所以空間複雜度是常數級別。

pp 更多 LeetCode 解答在此,一起來學習!

內推機會來啦!

跟一流的人才幹大事,享受成功進步的高級樂趣!

https://ithelp.ithome.com.tw/upload/images/20230915/20151958nT7kgUzy4M.png 內推機會 https://ithelp.ithome.com.tw/upload/images/20230902/20151958hbhGNE7BJ4.png 加入讀書會 (邀請碼:7199)

上一篇
LeetCode 699. Falling Squares
下一篇
LeetCode 210. Course Schedule II
系列文
破解 Android 工程師面試白板題:30 道面試題目與解答30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
Marvin
iT邦新手 1 級 ‧ 2023-10-08 11:36:02

我有一陣子蠻喜歡寫迴文的題目,這篇很棒

John Lu iT邦新手 4 級 ‧ 2023-10-08 12:10:11 檢舉

迴文系列我之前也練過很多,國外公司的面試還蠻常見

我要留言

立即登入留言