[leetcode]9.回文数

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

我最开始的解法,把数字转换成字符串,然后比较头尾,时间空间复杂度还过得去。当然反转方法也可以用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;
    }
}

猜你喜欢

转载自blog.csdn.net/u013425438/article/details/87889806