確定整數是否是迴文?空間O(1)時間複雜度O(logn)

class Solution {
    public boolean isPalindrome(int x) {
        if( x <0 || (x % 10 == 0 && x != 0)){
            return false;
        }
        
        int reverseNumber = 0;
        while( x > reverseNumber){
            reverseNumber = reverseNumber*10 + x%10;
            x /= 10;
        }
        
        return x == reverseNumber || x == reverseNumber/10;
        
    }
}

現在讓我們考慮如何恢復上一半的數字。對於號碼1221,如果我們這樣做1221 % 10,我們得到最後一個數字1,得到第二個數字,我們需要刪除最後一個數字1221,我們可以通過將它除以10來實現1221 / 10 = 122然後我們可以通過將模數乘以10得到最後一個數字122 % 10 = 2,如果我們將最後一位乘以10,並添加第二個最後一個數字1 * 10 + 2 = 12,則它給出我們想要的還原數字。繼續這個過程將給我們更多的數字的恢復的數字。

現在的問題是,我們怎麼知道我們已經達到了這個數字的一​​半?

由於我們將數字除以10,並將反轉數乘以10,當原始數字小於反轉數時,這意味着我們已經處理了一半數字。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章