9. 回文数

130 阅读1分钟

方法一:每次取头尾两位比较

class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0) {
            return false;
        }
        int high = 1;//最高位数,121 high = 100
        int y = x;
        while (y >= 10) {//必须这么写,如果写y >= 0,high会比y多一位,有越界风险。
            high *= 10;//计算所以用来获取最高位的除数
            y /= 10;
        }

        while (x != 0) {
            //取头尾两个数比较
            if (x / high != x % 10) {
                return false;
            }
            x = (x % high) / 10; //把x去掉头尾
            high /= 100;//去掉了两位,所以用来获取最高位的除数要少两位
        }
        return true;
    }
}    

方法二:反转整数,再比较

如果是回文数,显然不会溢出. why?

public boolean isPalindrome(int x) {
	 	int rev = 0;
	 	int y = x;
	 	if(x < 0){
	 		return false;
	 	}		 		
		while(y != 0){
			int res = y % 10;
			rev = rev * 10 + res;
			y = y / 10;
		}
        return rev == x;
    }