class Solution {
public:
bool isPalindrome(int x) {
if( x < 0 )
{//负数不是回文数
return false;
}
int tmp = x;
int ret = 0;
while(tmp)
{//思路是:将回文数字倒序,若何原来的数字相同则是,否则不是。
ret = ret * 10 + tmp%10;
tmp/=10;
}
if(ret == x)
{
return true;
}
return false;
}
};
这个题确实很简单,但是还是需要理解一下,意思是理解题目意思。题目说一个一个数字是否是回文,若是则返回true,否则返回false。我开始看的是时候老是在想是不是找一个数字对应的二进制是否为回文,而且还不能使用额外空间,真伤脑筋啊。但是我还是想出来一些思路,一个整数不是有32位吗,我们拿一个一个循环,循环16次(记i为下标),每次比较 第 i 位 和第 31-i 位是否相同,这样最终可以判断是否是回文。但仔细推敲了一下,最终发现原来不是这样的,这个题就是简单的判断一个数字的十进制对应苏子是否是回文,(我以为LeetCode上的题都是很难的,所以难免会多想)。既然知道要求什么,那就可以开始了,分析一下:
1. 判断数字是否是回文,是求数字对不对称。
2. 不能使用额外空间,这个限制又让我多想了很多。
3. 我的思路是讲一个数字倒序一边看和原来数字是都想等,这种思路比先转化为字符串再逆序字符串要简单的多。
4. 至于像最后一些特殊情况,比如最后一位是0的回文数字倒序后不就和原来数字不等了吗,但是请仔细考虑一下,最后一位是0的数字若是回文数,那么第一位必为0,这个数是不可能存在的。
运行结果如下: