題目
判斷一個(gè)整數(shù)是否是回文數(shù)∷教瘢回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)整以。
示例 1:
輸入: 121
輸出: true
示例2:
輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 凫乖。 從右向左讀, 為 121- 错森。因此它不是一個(gè)回文數(shù)吟宦。
示例3:
輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是一個(gè)回文數(shù)涩维。
進(jìn)階:
可否不將整數(shù)轉(zhuǎn)為字符串來解決這個(gè)問題殃姓?
解決思路
1、思考什么數(shù)字一定不為回文數(shù)?
不難想到辰狡,當(dāng)數(shù)字為負(fù)數(shù)的時(shí)候锋叨,一定不是回文數(shù)垄分。
所以宛篇,當(dāng)x<0時(shí),返回false薄湿。
2叫倍、如何將數(shù)字倒序輸出?
核心思想:使用模運(yùn)算求%10的余數(shù)豺瘤,從而取出該數(shù)字的最后一位吆倦,將求出的最后一位數(shù)字乘以10進(jìn)一位,并加上下一次的取余數(shù)坐求,然后該數(shù)字依次整除實(shí)現(xiàn)遞歸運(yùn)算蚕泽。
例如:數(shù)字123
123%10的余數(shù)是3,3*10=30桥嗤;
然后123/10=12须妻,此時(shí)再對12取余,為2泛领;
30+2=32荒吏,然后 32*10 =320;
再對12/10=1渊鞋,最后320+1=321绰更。實(shí)現(xiàn)數(shù)字倒序輸出。
3锡宋、對比正序和倒序數(shù)字是否相同
例如:對比123與321儡湾,發(fā)現(xiàn)兩數(shù)字不相同,得出結(jié)論為false执俩,該數(shù)字不是回文數(shù)盒粮。
Java代碼實(shí)現(xiàn)
class?Solution?{????
????public?boolean?isPalindrome(int?x)?{????????
????????if?(x?<?0{????????????
????????????return?false;????????
????????}????????
????????int?temp?=?x;????????
????????int?reverse?=?0;????????
????????while(temp?!=?0{????????????
????????????reverse?=?reverse*10?+?temp%10;????????????
????????????temp?=?temp/10;????????
????????}????????
????????return?reverse?==?x;????
????}
}
運(yùn)行結(jié)果
Tips
Java中運(yùn)算符不要搞混:
% 代表模運(yùn)算,取余奠滑。例如:16%3=1
/? ?代表除法運(yùn)算丹皱,向下取整。例如:16/3=5