一、概述
给一个数,判断是否是回文数。
简单炸了,如果不要求时间复杂度的话。
二、分析
1、我的思路
int转string,reverse然后判断是否相等。
我真的好奇这些题目的难度梯度,太差劲了。
当然如果要求不用string还是有点麻烦的。
2、较好的思路
首先判断x,如果x是负数或者10的整数倍,那么直接返回false。
然后就是关键了:
判断前一半和后一半是否相等:
使用ans存储后一半,x每次减少一位,ans每次增加一位,这样直到它们俩各占原数的一半,比较它们俩是否相等即可。
有两个细节:
其一是ans是反过来存储的,这样才能保证比较一半的正确性;
其二是退出循环要求是ans>=x,当x是偶数位时,若是回文数,则退出循环时,ans与x相等;当x是奇数位时,若是回文数,ans比x多一位,这最后一位刚好不必判断。
三、总结
没什么好总结的,或许学到了to_string函数和reverse函数?
PS:代码如下:
1、我的代码
class Solution {
public:
bool isPalindrome(int x) {
string s=to_string(x);
string temp=s;
reverse(s.begin(),s.end());
if(temp==s)
return true;
else
return false;
}
};
2、较好的代码
class Solution {
public:
bool isPalindrome(int x) {
int ans=0;
if(x<0||(x!=0&&x%10==0))
return false;
else
{
while(x>ans)
{
ans=ans*10+x%10;
x=x/10;
}
}
if(x==ans||x==ans/10)
return true;
else
return false;
}
};