題目描述
判斷一個(gè)整數(shù)是否是回文數(shù)〖鼗#回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)万哪。
示例
輸入: 121
輸出: true
輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 抡秆。因此它不是一個(gè)回文數(shù)奕巍。
輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是一個(gè)回文數(shù)儒士。
解題思路
- 考慮反轉(zhuǎn)數(shù)字的一半的止,如果該數(shù)字是回文,則其后半部分反轉(zhuǎn)肯定與原始數(shù)字的前半部分?jǐn)?shù)字相同着撩。
- 如何判斷已經(jīng)反轉(zhuǎn)了數(shù)字的一半诅福?如果已經(jīng)反轉(zhuǎn)的數(shù)字大于等于原始數(shù)字的時(shí)候,就意味著反轉(zhuǎn)了一半的數(shù)字拖叙。
代碼
public boolean isPalindrome(int x) {
// 負(fù)數(shù)肯定不是回文
// 如果最低位為0 , 除了數(shù)字0之外氓润,其他的肯定也不是回文
if (x < 0 || (x != 0 && x % 10 == 0)) {
return false;
}
int revertNum = 0;
while (revertNum < x) {
revertNum = x % 10 + revertNum * 10;
x = x / 10;
}
// 當(dāng)數(shù)字長(zhǎng)度為奇數(shù)的時(shí)候, 可以通過(guò)revertNum / 10來(lái)去除中位的數(shù)字憋沿,因?yàn)橹形坏臄?shù)字不影響回文的比較旺芽。
return x == revertNum || x == revertNum / 10;
}