題目概要

題目給你一個整數,請你判斷是否為回文數

回文數:係指一個數字在反轉之後仍然保持不變的數字,例如356513988939009212373212等。

解題思路

判斷回文數的一種常見方法是將數值轉換成字符串,然後將字符串反轉並與原始字符串比較。這種方法雖然簡單易懂,但是效率較低,尤其是在處理大量數字時。建議使用下面的方法會更為合適。

要判斷一個數值是否為回文數:

  • 首先,如果數字為負數或是以0結尾,則不可能是回文數。
  • 接著製造一個反轉數字rev
  • 最後讓兩個數字去對比,確認反轉數字是否為原來數字的回文數:
    • 如果數字長度為偶數,則 x == reversed
    • 如果數字長度為奇數,則 x == reversed / 10

參考程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
bool isPalindrome(int x) {
// 如果數字為負數或是以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 == reversed
// 如果數字長度為奇數,則 x == reversed / 10
return x == rev || x == rev / 10;
}
};