leetcode第9题

  • 题目:Determine whether an integer is a palindrome. Do this without extra space.
  • 解析:判断一个数字是否是回文数,即如123321,98789类似的数字,首先负数不是回文数,以0结尾的非负数不是回文数,对于一般的非负数字,只需要将整个数字反转判断是否相等即可,但是一个int类型反转有可能会溢出,这里用到了一个技巧,即反转一半,如123321反转一般,剩下的为123,得到的为123,相等就是回文数字,对于12321,反转后为12,得到的是123,如何判断呢,只需要将得到的除以10就可以判断啦,若想等极为回文数,代码如下,运行时间60ms。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool isPalindrome(int x) 
{

if(x < 0 || (x > 0 && x % 10 == 0))
return false;
int sum = 0; //保存反转的数字
while(sum < x)
{
sum = sum*10 + x % 10;
x /= 10;
}
if(sum == x || sum / 10 == x)
return true;
return false;
}