Last Updated on 2021-01-06 by Clay
題目
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Follow up: Could you solve it without converting the integer to a string?
Example:
Input: x = 121
Output: true
Input: x = -121
Output: false
本題給定一範圍介於 -2^31-1 和 2^31 之間的整數值,然後我們必須判斷該數值是否顛倒過來也是相同的,有點像是數值本身的『回文』。
當然,這題將其數值轉成字串來解題是非常直覺的。不過在題目的 Follow up 中提到,是否能不轉為字串來解開這個題目呢?
解題思路
由於我在解這題之前,已經簡單看過 7. Reverse Integer 這題的解法,所以馬上想到了一個挺相似的解題方法。
- 首先判斷數值是否為負值,若為負值則回傳 false(負數一定不回文)
- 建立個初始值為 0 的變數,用來儲存回文後的數值
- 建立迴圈,每次都將輸入值 x 的個位數取出(% 10 即是),然後將數值整除 10(等於個位數不見了)
- 每次迴圈執行過程中,都先將回文值乘十,在加上 x 的個位數
- 在 x 值最後一位取完後,即離開迴圈,比較原本的 x 值與回文值是否相同
C++ 程式碼
class Solution { public: bool isPalindrome(int x) { // Preventation if (x < 0) return false; // Init long int x_reverse = 0; int x_origin = x; // Calculate reverse value while (x) { x_reverse = x_reverse*10 + x%10; x /= 10; } return x_origin == x_reverse; } };
Python 程式碼
class Solution: def isPalindrome(self, x: int) -> bool: if x < 0: return False x = str(x) return x == x[::-1]
順帶一提我 Python 一開始也是像我想像地那樣去解題 …… 但意外地居然轉成字串解比較快。
我發現我就算學習 Python 到第三個年頭了,還是沒有很清楚 Python 的語言特性,著實慚愧。