描述
对,就是这么突然的切换到了leetcode-cn,变成了全中文界面
判断一个整数是否是回文数。不能使用辅助空间。
一些提示:
负整数可以是回文数吗?(例如 -1)
如果你打算把整数转为字符串,请注意不允许使用辅助空间的限制。
你也可以考虑将数字颠倒。但是如果你已经解决了 “颠倒整数” 问题的话,就会注意到颠倒整数时可能会发生溢出。你怎么来解决这个问题呢?
本题有一种比较通用的解决方式。
分析
提示给的蛮多了
首先负数肯定不是回文数了,0-9肯定是回文数
转成字符串的话就占用了额外的空间
联想之前的颠倒整数,其实思路是比较一致的,一样是反转。只不过面临越界问题。
我当时的方法(代码1)是用了long long,因为反正int的位数在那里,再怎么翻也不会超过long long
看到网上有比较机智的,只反转了一半,只不过要单独考虑10的倍数的情况,觉得很巧,一起附上该方法来自 https://blog.youkuaiyun.com/lisonglisonglisong/article/details/45701629
(不知为何后者运行时间居然还稍稍慢一点点)
代码1
//全翻转比较
bool isPalindrome(int x) {
if (x < 0)return false;
if (x >= 0 && x < 10)return true;
long long temp=0;
int xx = x;
while (x!=0)
{
int n = x % 10;
temp = temp * 10 + n;
x /= 10;
}
if (temp == xx)return true;
else return false;
}
代码2
if (x < 0 || x>0&&x%10==0)return false;
if (x >= 0 && x < 10)return true;
int temp=0;
while (x>temp)
{
int n = x % 10;
temp = temp * 10 + n;
x /= 10;
}
if ((x == temp / 10) || (x == temp))return true;
else return false;
}
1个tip
处理回文数 翻转数 都是靠的取模和乘10运算

本文探讨了如何在不使用额外空间的情况下判断一个整数是否为回文数,提供了两种解决方案:一种是通过完全反转整数进行比较;另一种是只反转一半的整数并进行比较。同时讨论了处理过程中可能遇到的溢出问题。
910

被折叠的 条评论
为什么被折叠?



