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,再用迴圈把每一位數字取出來,組成反轉數字 x2

  • 每次先讓 x2 *= 10,把舊數字往左移一位
  • 再把 x % 10(最後一位)加進來
  • 最後 x /= 10,丟掉最後一位繼續處理

x 變成 0 時,x2 就是原數字的反轉。最後比較 x1x2 是否相等即可。

使用 long long 儲存 x1x2,可避免反轉過程超出 int 範圍。

所有變數

  • x:題目輸入整數(在迴圈中會被除到 0)
  • x1:原本的 x(用於最後比較)
  • x2:反轉後的數字

🪜 主要流程步驟

  • 如果 x < 0,直接回傳 false
  • x 存到 x1,並把 x2 初始化為 0
  • 反轉 x:反覆取出最後一位加到 x2,同時讓 x /= 10 直到為 0
  • 比較 x1x2:相等回傳 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/

作者:scottnick
撰寫日期:2026-02-07
類別:
原文連結:https://scottnick.github.io/cpp-notes/all%20problems/9-palindrome-number.html