IT源码网

[leetcode]9.回文数

qq123 2021年04月03日 程序员 381 0

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

我最开始的解法,把数字转换成字符串,然后比较头尾,时间空间复杂度还过得去。当然反转方法也可以用gBuilder的reverse()方法来进行。

class Solution { 
    public boolean isPalindrome(int x) { 
        if(x<0){ 
            return false; 
        }else{ 
            char[] charStr = Integer.valueOf(x).toString().toCharArray(); 
            for(int i=0; i<charStr.length/2; i++){ 
                if(charStr[i] != charStr[charStr.length-1-i]){ 
                    return false; 
                } 
            } 
        } 
        return true; 
    } 
}

进阶要求是不把数字转换为字符串,这个可以通过数值反转来实现,但是会有一个问题,就是反转后的数值可能会超出int的范围,讨论区有人提出一个思路就是将数字都变成long类型,这样就不会超出了。

class Solution { 
    public boolean isPalindrome(int x) { 
        long revx = 0; 
        long orx = x; 
        if(x<0){ 
            return false; 
        } 
        while(orx > 0){ 
            revx = revx * 10 + orx%10; 
            orx = orx/10; 
        } 
        if(revx != x){ 
            return false; 
        } 
        return true; 
    } 
}

写完之后在想,如果数字本身是long那怎么办,由此忽然想到,虽然这个情况是存在的,但是如果是回文数的话那么反转后肯定不会超出int,如果不是回文数,超出后会被截取,也肯定不等于原数,所以这个问题可以忽略,代码如下。

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

 

评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!