這題要求我們判斷一個整數是否是迴文,換言之,它從前往後讀和從後往前讀是相同的。
跟一流的人才幹大事,享受成功進步的高級樂趣!
內推機會來啦!能與優秀的程式設計師共事,是特別痛快的事,因為厲害的工程師大神會刺激你想要迎頭趕上的上進心,尤其是一起討論解決方案時,他們會觸發你有更好的解決思維能力,彼此共同成長並且一起享受解謎與破關般的樂趣。 你一定聽得懂我在說甚麼感覺,趕快把握機會,動動手指投遞履歷吧! 立即加入「面試讀書會」,和大家一起準備面試!
內推機會 加入讀書會 (邀請碼: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
}
}
時間複雜度:
,其中 是 x
的絕對值。我們只需要反轉 x
的一半位數,所以時間複雜度是對數級別。
空間複雜度:
。我們只需要幾個變數來存儲原始數字和反轉的後半部分,所以空間複雜度是常數級別。
內推機會來啦!
跟一流的人才幹大事,享受成功進步的高級樂趣!
內推機會 加入讀書會 (邀請碼:7199)