判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例三:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
对于这个题,首先,如果是一个负数,那它一定不是回文数;如果是正数,可以直接求出要判断的数的回文数,如果求出来的数和它本身相同,就说明是回文数,否则就不是。
class Solution {
public boolean isPalindrome(int x) {
if (x < 0)
{
return false;
}
int tmp = x;
int num = 0;
while (tmp > 0)
{
num = num*10+tmp%10;
tmp /= 10;
}
return x == num;
}
}
执行结果:
上面的方法还可以进行优化:
- 首先负数和10的整数倍一定不是回文数(比如100)
- 对于一个有奇数位的数,比如12321,如果他是回文数,那么它的前两个数(12)和后两个数的倒序(12)一定相同,否则它就不是回文数;
- 对于一个有偶数位的数,比如1221,如果是回文数,那么从前往后看的前两个数12和从后往前看的后两个数12一定相同,否则它就不是回文数。
代码如下:
class Solution {
public boolean isPalindrome(int x) {
if (x < 0 || (x != 0 && x % 10 == 0))//0或者10的倍数一定不是回文数
{
return false;
}
int tmp = 0;
while (tmp <= x)
{
tmp = tmp*10+x%10;
if (tmp == x || tmp == x/10 )//有奇数个数还是偶数个数
{
return true;
}
x /= 10;
}
return false;
}
}