9. Palindrome Number

題設(shè)

Determine whether an integer is a palindrome. Do this without extra space.

要點(diǎn)

  • 反轉(zhuǎn)一半對(duì)比

要判斷是不是回文數(shù)字,一個(gè)思路是把int轉(zhuǎn)為string處理。但是題目限制了空間,所以不可行;
還有一種思路是找出這個(gè)數(shù)字的反轉(zhuǎn)數(shù),判斷是否相等。但是之前的題目得知int反轉(zhuǎn)可能會(huì)溢出;
解題思路是把數(shù)字的最后一半反轉(zhuǎn)。
例如:
對(duì)于1221,通過(guò)反轉(zhuǎn)后面兩位,發(fā)現(xiàn)12==12,所以是回文數(shù)字;而1231,13!=12,就不是回文數(shù)字;
對(duì)于12321,反轉(zhuǎn)后面3位,有123=123,也是回文數(shù)字。
在尋找反轉(zhuǎn)數(shù)的過(guò)程中,一旦發(fā)現(xiàn)本次循環(huán)得到的反轉(zhuǎn)數(shù)和此時(shí)的x值相等,就返回true。
注意0-9都是反轉(zhuǎn)數(shù),負(fù)數(shù)不是反轉(zhuǎn)數(shù);10、20這種≥10且%10==0的肯定也不是回文數(shù)。

    public static boolean isPalindrom(int x){
        if(x >= 0 && x < 10)
            return true;
        if(x < 0 || x % 10 == 0) // 注意最后一位為0的情況,肯定不是回文數(shù),但是會(huì)對(duì)后面產(chǎn)生影響
            return false;

        int value = x;
        int result = 0;
        while(value >= 10){
            int tail = value % 10;
            result = result * 10 + tail;
            if(result == value) // 1221這種偶數(shù)位情況
                return true;
            value /= 10;
            if(result == value) // 12321這種奇數(shù)位情況
                return true;
        }
        return false;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容