判断回文数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Greenchess/article/details/73277487

回文数:原数与其倒置后的数相等
1.小数没有回文数
2.负数不是回文数
3.个位数都是回文数(包括0)

方法一:转成String

(本质:判断回文字符串)
缺点:需要额外的string空间

public static boolean isPalindrome(int x) {
        if(x<0)
            return false;
        String a = Integer.toString(x);
        int len = a.length();
        for(int i=0 ; i<len/2 ; i++){
            if(a.charAt(i) != a.charAt(len-1-i)){
                return false;
            }
        }
        return true;
    }

方法二:整数的转置

(本质:转置后比较与原数是否相等)
缺点:int类型只有32位,范围(1-2^31~2^31-1),转置结果会发生溢出

题目:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

//我的
public int reverse(int x) {
            int a = 0,i = 0;
            long b = 0;

            while(x != 0){
                a = x%10;
                b = b*10 +a;
                x = x/10;
            }
            if(b<-2147483647 || b>2147483647)
                return 0;
            else{
                int result = (int)b;
                return result;
            }
    }
//大神的,不需要出现0xf7777777
public int reverse(int x)
{
    int result = 0;

    while (x != 0)
    {
        int tail = x % 10;
        int newResult = result * 10 + tail;
        if ((newResult - tail) / 10 != result)
        { return 0; }
        result = newResult;
        x = x / 10;
    }

    return result;
}

方法三:转置一半

(本质:利用对称性,只转置一半就比较是否相等;)
好处1:转置时间短;好处2:不会发生溢出

public boolean isPalindrome(int x) {
        if(x<0 || (x != 0 && x%10 == 0))  //特殊情况x=10
            return false;
        int y = 0;
        while(x > y){
            y = y*10 + x%10;
            x = x/10;
        }
        return(x == y || x == y/10);
    }
展开阅读全文

没有更多推荐了,返回首页