题意:给你一个数,判断是不是回文数。回文数:一个数从左读和从右读一样(注:最好不要将int转换为string)。
解题思路:
先判断该数是不是负数,如果是负数返回false;
思路一、可以使用一个map将位置与该位置的数对应起来,然后按照从两头向中间的顺序对比;
思路二、将该数的后半部分逆序后组成一个新数,然后对比该数的前半部分和后半部分是否相等(该数的位数为偶数),或前半部分等于后半部分除以10(该数的位数为基数)。前提是该数不能以0结尾,若以0结尾则肯定为非回文数。
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0 || (x % 10 == 0) && x != 0)
return false;
int lastHalf = 0;
while(x > lastHalf)
{
int num = x % 10;
lastHalf = lastHalf * 10 + num;
x /= 10;
}
return x == lastHalf || x == lastHalf / 10;
}
};