确定整数是否是回文?空间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,当原始数字小于反转数时,这意味着我们已经处理了一半数字。


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