一、问题描述
Description: Determine whether an integer is a palindrome. Do this without extra space.
判断一个整数是否是回文数,不要使用额外的空间。
二、解题报告
解题时我们需要注意一下几点:
- 负数不是回文数。
- 如果将整数转化成字符串来判断,则会使用额外的空间。
- 如果将整数直接逆转来判断,逆转后的整数可能会超出
int
的上界。
那么,该怎么做呢?
为了避免超出 int 的上界,我们可以只逆转一半。代码如下:
class Solution {
public:
bool isPalindrome(int x) {
if(x<0 || (x>0 && x%10==0)) // 负数与整十的情况
return false;
int sum = 0;
while(x > sum) // 逆转一半
{
sum = sum*10 + x%10;
x = x/10;
}
return (x==sum) || (x==sum/10);
}
};
注意,如果是偶数位的回文数,则x==sum
;如果是奇数位的回文数,则x==sum/10
。
LeetCode答案源代码:https://github.com/SongLee24/LeetCode