法一:
反转整数比较
class Solution {
public:
bool isPalindrome(int x) {
int tmp=x,sum=0;
if(x<0) return false;
while(x!=0){
sum=sum*10+x%10;
x/=10;
}
return sum==tmp;
}
};
法二:
只反转一半,偶数位数的直接与剩下的前半段比较,奇数位数的反转结果除以10以后与前半段比较
class Solution {
public:
bool isPalindrome(int x) {
int sum=0;
if(x<0 || (x%10==0&&x!=0)) return false;
while(x>sum){
sum=sum*10+x%10;
x/=10;
}
return sum==x || sum/10 ==x;
}
};
法三:
从两边向中间进行对比,最左边的数要除以与当前量级相同的数取得,先计算位数;右边的数模10取得
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0)
return false;
if (x < 10)
return true;
int figure = 1;
for (int t = x; t / 10 != 0; t /= 10, figure++); //计算位数
int t = x;
for (int half = figure / 2; half > 0; half--)
{
if (t / (int)pow(10, figure - 1) != t % 10) //两头比较
return false;
t %= (int)pow(10, figure - 1); //去掉最左边的数
t /= 10; //去掉最右边的数
figure -= 2; // 位数减2
}
return true;
}
};
法四:
转为字符串检验是否为回文字符串
class Solution {
public:
bool isPalindrome(int x) {
string num = std::to_string(x);
int i = 0;
int j = num.length() - 1;
while (num[i] == num[j]){
if(i==j || i+1==j) return true;
i++;j--;
};
return false;
}
};
class Solution {
public:
bool isPalindrome(int x) {
int n,i=0,j=0;
int a[10]={0};
int y=x;
if(y<0)
return 0;
while(y>9)
{
a[i++]=y%10;
y = y/10;
}
a[i] = y;
while(j<i)
{
if(a[j]!=a[i])
return 0;
else
{
j++;
i--;
}
}
return 1;
}
};