# 9. Palindrome Number **練習日期:** 2026-02-07 **難度:** Easy **類型:** Math ## 📘 題目敘述 給你一個整數 `x`,如果 `x` 是回文數(palindrome),回傳 `true`;否則回傳 `false`。 如果一個整數從左到右讀與從右到左讀都相同,那它就是回文數。 例如:`121` 是回文數,而 `123` 不是。 ### 條件限制 * `-2^31 <= x <= 2^31 - 1` ## 🧠 解題思路 我先處理最明顯不可能的情況:如果 `x` 是負數,那它前面會有 `-`,反過來不可能一樣,所以直接回傳 `false`。 接著我用「把數字反轉」的方式檢查是否回文: 我先把原本的 `x` 存在 `x1`,然後用迴圈把 `x` 的每一位數字取出來,組成一個新的反轉數字 `x2`。 反轉的做法是固定套路: * 每次先讓 `x2 *= 10`,把舊的數字往左移一位 * 再把 `x % 10`(`x` 的最後一位)加進來 * 最後 `x /= 10`,把 `x` 的最後一位丟掉,繼續處理下一位 當 `x` 被除到 0,代表全部位數都處理完了,`x2` 就是原數字的反轉。 最後只要比較 `x1` 和 `x2` 是否相等,就可以知道原數字是不是回文。 我用 `long long` 存 `x1`、`x2`,是因為反轉時可能會超過 `int` 的範圍,這樣比較安全。 ### 所有變數 * `x`:題目輸入的整數(在迴圈中會被除到 0) * `x1`:原本的 `x`(保留下來用來最後比較) * `x2`:反轉後的數字 ## 🪜 主要流程步驟 * 如果 `x < 0`,直接回傳 `false` * 把 `x` 存到 `x1`,並把 `x2` 初始化為 0 * 反轉 `x`: * 反覆取出 `x` 的最後一位,加到 `x2` 的尾巴 * 同時把 `x` 不斷除以 10,直到變成 0 * 比較 `x1` 和 `x2`: * 如果相等回傳 `true` * 否則回傳 `false` ## 💻 程式碼實作 ```cpp 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/description/
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up