Determine whether an integer is a palindrome. Do this without extra space.
题目解析:
判断一个整数是否是回文数,
“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number)。
设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。
0是回文数,负数、小数不是回文数,
解题方法一:
我们用数组将整数的各个位存储起来,之后判断首位两个数不断向中间靠拢时,两个值是否相等就可判断这个数是否是回文,代码如下:
class Solution {
public:
bool isPalindrome(int x) {
bool result=true;
if (x==0)
{
return result;
}
if (x<0)
{
return false;
}
int temp;
vector<int >array;
while(x/10!=0)
{
temp=x%10;
x=x/10;
array.push_back(temp);
}
if (x%10!=0)
{
array.push_back(x%10);
}
for (vector<int>::iterator iter=array.begin(),iter1=array.end()-1;iter!=array.end(),iter1!=array.begin();iter++,iter1--)
{
if (*iter!=*iter1)
{
result=false;
break;
}
}
return result;
}
};
优点:方法直观通用缺点:运算复杂,占用额外的空间
方法二:
求整数n的各个位逆序之后所组成的整数的值,如果两个值相等就是回文数,当然了,像10,100,220,最后位有0的直接判断不是回文。
其中求整数的reverse 值仿照http://blog.youkuaiyun.com/sinat_24520925/article/details/45558769 的方法二,具体算法如下:
代码如下:
class Solution {
public:
bool isPalindrome(int x) {
if(x<0||(x!=0&&x%10==0)) return false;
int sum=0;
int temp=x;
while(temp)
{
sum=sum*10+temp%10;
temp/=10;
}
return (x==sum);
}
};
0是