---
# System prepended metadata

title: 9. Palindrome Number
tags: [Leetcode]

---

# 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/