📘 題目敘述
給你一個整數 x,如果 x 是回文數(palindrome),回傳 true;否則回傳 false。
如果一個整數從左到右讀與從右到左讀都相同,那它就是回文數。例如:121 是回文數,而 123 不是。
條件限制
-2^31 <= x <= 2^31 - 1
🧠 解題思路
先處理最明顯不可能的情況:如果 x 是負數,前面會有 -,反過來不可能一樣,所以直接回傳 false。
接著使用「把數字反轉」來檢查是否回文:先把原本的 x 存在 x1,再用迴圈把每一位數字取出來,組成反轉數字 x2。
- 每次先讓
x2 *= 10,把舊數字往左移一位 - 再把
x % 10(最後一位)加進來 - 最後
x /= 10,丟掉最後一位繼續處理
當 x 變成 0 時,x2 就是原數字的反轉。最後比較 x1 和 x2 是否相等即可。
使用 long long 儲存 x1、x2,可避免反轉過程超出 int 範圍。
所有變數
x:題目輸入整數(在迴圈中會被除到 0)x1:原本的x(用於最後比較)x2:反轉後的數字
🪜 主要流程步驟
- 如果
x < 0,直接回傳false - 把
x存到x1,並把x2初始化為 0 - 反轉
x:反覆取出最後一位加到x2,同時讓x /= 10直到為 0 - 比較
x1和x2:相等回傳true,否則回傳false
💻 程式碼實作
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) {
return false;
}
long long x1 = 0, x2 = 0;
x1 = x;
while (x > 0) {
x2 = x2 * 10;
x2 += x % 10;
x = x / 10;
}
if (x1 == x2) {
return true;
}
return false;
}
};
🔗 題目連結
https://leetcode.com/problems/palindrome-number/