判断回文数

来源:互联网 发布:达内java视频 编辑:程序博客网 时间:2024/06/11 10:30

回文数:原数与其倒置后的数相等
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;            }    }
//大神的,不需要出现0xf7777777public 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);    }