1. 負數不是.
2. 溢出也不是.
3. 時間複雜度log(x).
class Solution {
public:
bool isPalindrome(int x) {
if(x<0)
return false;
int sum=0;
int oldx = x;
while(x){
int temp = x%10;
if(sum>INT_MAX/10 || sum==INT_MAX/10&&temp>=7)
return false;
sum = sum*10 +temp;
x = x/10;
}
if(oldx==sum)
return true;
else
return false;
}
};
4. 按照第二個想法,爲了避免數字反轉可能導致的溢出問題,爲什麼不考慮只反轉int 數字的一半?畢竟,如果該數字是迴文,其後半部分反轉後應該與原始數字的前半部分相同。
5. 現在的問題是,我們如何知道反轉數字的位數已經達到原始數字位數的一半?
我們將原始數字除以 10,然後給反轉後的數字乘上 10,所以,當原始數字小於反轉後的數字時,就意味着我們已經處理了一半位數的數字。
class Solution {
public:
bool isPalindrome(int x) {
// 特殊情況:
// 如上所述,當 x < 0 時,x 不是迴文數。
// 同樣地,如果數字的最後一位是 0,爲了使該數字爲迴文,
// 則其第一位數字也應該是 0
// 只有 0 滿足這一屬性
if(x<0 || x%10==0 && x!=0)
return false;
int reverse = 0;
while(x>reverse) {
reverse = reverse*10 + x%10;
x /= 10;
}
return (x==reverse) || (x==(reverse/10));
}
};