您的位置:首页 > 其它

leetCode--回文数

2019-05-07 17:09 666 查看

题目:

我的答案(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;
}
};

结果:

官方答案:

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);
}
};

结果:

其他人答案:

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;

}
}
};

结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: