这道题难度为Easy
题目如下:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入:121 输出:true
示例 2:
输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。
这道题的想法是:
利用取余和整除操作,获得输入的第一位和最后一位,再进行比较,如果发现不符合即可退出循环并返回False,当且仅当全部相等的时候才返回True。
首先第一步要获取除数,因为我们需要输入/div = 第一位,所以首先要获取到div的值。通过while( 输入 / div >= 10) div = div * 10可得。
第二步就可以在循环体内进行比较了。这里我拿1221作为例子,首先获取到第一位为1,最后一位为1,相同,则进入下一次比较;进入之前要对输入进行修改,删除第一位和最后一位,即下一次循环得输入为22。这里的删除操作为 1221 % div 得到221,然后再用221 % 10 得到22即可。
代码如下:
class Solution {
public boolean isPalindrome(int x) {
if(x < 0) return false; //边界处理
int left, right;
int div = 1;
while( x / div >= 10) div = div * 10; //获得除数
while(x > 0){ //在这个循环内,每一位进行比较,只要有一位不符合则返回false
left = x / div; //通过除以div获取x的第一位数
right = x % 10; //通过用10取余获取x的最后一位数
if(left != right) return false;
x = (x % div) / 10; //比较完以后,把x的第一位和最后一位去掉
div /= 100; //因为上式去掉了两位数,所以这里应该除以100,而不是10
}
return true;
}
}
需要注意的是div在每一次循环得更新为缩小100倍,而不是10倍,因为每一次循环内就去除了两个数字。