iT邦幫忙

2025 iThome 鐵人賽

DAY 0
0
自我挑戰組

LeetCode 每日一題挑戰系列 第 9

LeetCode 鐵人賽 Day 8 — Palindrome Number

  • 分享至 

  • xImage
  •  

題目簡介

今天的題目是 Palindrome Number (回文數字)。
要求我們判斷一個整數 x,是否正著讀和倒著讀一樣。

例子:

121 → true

-121 → false (因為會變成 121-)

10 → false (因為倒過來是 01)

思路

這題一看就想到兩種作法:

轉字串法
把數字轉成字串,再反轉比較。很直觀,但有點作弊感。

數學反轉法(推薦)

負數一定不是回文,直接回傳 false。

最後一位是 0(但不是 0 本身),也不可能是回文。

用數學方式把數字的「後半段」反轉出來,然後跟前半段比較。

例如 1221:

拿到最後一位 1 → 組成 rev = 1

拿到下一位 2 → 組成 rev = 12

當 rev >= x 時,停下來比較。

這樣不用處理整個數字,也不會爆 int。

程式碼 (Java)
class Solution {
public boolean isPalindrome(int x) {
// 負數或最後一位是 0(但不是 0 本身),一定不是回文
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}

    int rev = 0;
    while (x > rev) {
        rev = rev * 10 + x % 10;
        x /= 10;
    }

    // 偶數長度 → x == rev
    // 奇數長度 → x == rev/10 (中間數不影響)
    return (x == rev || x == rev / 10);
}

}

心得

這題算是給人暖身的 easy 題,讓人練習「數字拆解」。
我一開始直覺用字串反轉,但後來試了數學做法,發現其實邏輯滿優雅的,還能避免額外開記憶體。

https://ithelp.ithome.com.tw/upload/images/20250922/20169537m853QZVcWm.pnghttps://ithelp.ithome.com.tw/upload/images/20250922/20169537m9c72xaMY3.pnghttps://ithelp.ithome.com.tw/upload/images/20250922/20169537IR5HSqXzRw.pnghttps://ithelp.ithome.com.tw/upload/images/20250922/20169537r3dYERex89.png我覺得這題最大的收穫就是:有些題目不一定要把數字完整反轉,只要反轉一半就足夠了。


上一篇
LeetCode 鐵人賽 Day 7 — String to Integer (atoi)
系列文
LeetCode 每日一題挑戰9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言