题目:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121 输出: true
示例 2:
输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。
思路:
因为刚做的上一道题逆序输出一个数例x=123,输出321,用到的方法是x%10,x/10,每次得到个位数字计算的,然后这个题我就想着每次得到高位和个位相互比较,不相等则错误,相等则是回文数,但是超时了!
第一次代码:
超出了时间限制!
class Solution {
public:
bool isPalindrome(int x) {
if(x<0||x%10==0)
return false;
int left=0;
int right=0;
int num=0;
int tmp=0;
int power=0;
while(x!=0)
{
if(x%10)
{
tmp=x/10;
num++;
}
}//统计位数
for(int i=0;i<num-1;i++)
{
power*=10;
}
while(x)
{
right=x%10;
x/=10;//得到个位 丢弃个位
left=x/power;
x%=power;
power/=10;//得到高位 丢弃高位
if(right!=left)//如果左右不相等,则为假
{
return false;
}
}
return true;
}
};
第二次代码:
还是运用求逆序思路,当反转后的数字和原数相等就是回文数
class Solution {
public:
bool isPalindrome(int x) {
if(x<0)
return false;
if(x>=0 && x<10)
return true;
long long temp=0;
int res = x;
while (x!=0)
{
int n = x % 10;
temp = temp * 10 + n;
x /= 10;
}
if (temp == res)
return true;
else
return false;
}
};