题目:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/612d56febf1ea7e2a7aabce926c7e893.png)
我的答案(c++):
class Solution {
public:
bool isPalindrome(int x) {
vector<int> num;
int a = x;
if (x < 0) return false;
while (a!=0)
{
num.push_back(a%10);
a /= 10;
}
int j = num.size();
for (int i=0;i<j;i++)
{
j = j - 1;
if (num[i] != num[j]) return false;
}
return true;
}
};
结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/738d226cbabb10a6498af3e3bc844f8c.png)
官方答案:
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int revertedNumber = 0;
while(x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
return (x == revertedNumber || x == revertedNumber/10);
}
};
结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7768aa06d993cac319a68f9d22c6f28e.png)
其他人答案:
class Solution {
public:
bool isPalindrome(int x) {
//负数一定不是回文数
if (x < 0)
return false;
//123321
//将这个数的后面一半拿下来,组成一个新的整数
//统计整数的的位数数
int tmp = x;
int count = 0;
int nnum = 0;
while (tmp)
{
count++;
tmp /= 10;
}
//取后面一半的位数 组成新整数
for (int i = 0; i < count / 2; i++)
{
//只有第一次拿下来是个 一位数,其余每次拿下来都要在上一次的nnum基础上*10
if (i == 0)
{
nnum = x % 10;
x /= 10;
}
else
{
nnum = (x % 10) + nnum * 10;
x /= 10;
}
}
//比较新的整数 和 剩余部分整数 大小
if (count % 2 == 0)
{
//说明整数是偶数位,取count/2位数组成新的整数
if (x == nnum)
return true;
return false;
}
else
{
//整数是奇数位,取count/2位数 组成新的整数后,还需要将剩余整数再去掉最后一位
x /= 10;
if (x == nnum)
return true;
return false;
}
}
};
结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f7421d289722306fc43ab9f60e5fe48a.png)