在三种方法之前,须知:所有负数都不是回文!并且以0为结尾都不是回文。
于是有x<0||(x%10==0&&x!=0)
方法一 转换字符串判断
将int型整数转化成字符串,再逐个字符判断。
class Solution
{
public:
bool isPalindrome(int x)
{
bool result;
if (x < 0)
{
return false;
}
stringstream ss;
ss << x;
string str, reversedStr;
ss >> str;
int strSize = int(str.size());
for (int index = strSize - 1; index >= 0; index--)
{
reversedStr.push_back(str[index]);
}
result = str == reversedStr;
return result;
}
};
方法二 数学法
先循环出整数有多少位,再用求余和除来判断。
class Solution {
public boolean isPalindrome(int x) {
//边界判断
if (x < 0) return false;
int div = 1;
//
while (x / div >= 10) div *= 10;
while (x > 0) {
int left = x / div;
int right = x % 10;
if (left != right) return false;
x = (x % div) / 10;
div /= 100;
}
return true;
}
}
方法三 进阶数学法
当原数从中间分为两个数时,并且将后半部分转置,两部分相等,为回文。
如:12321,分两个部分,前(12)后(21),后转置(12)两者相等
用原数逐渐/10,用新数逐渐x*10+x/10;
class Solution {
public:
bool isPalindrome(int x) {
if(x % 10 == 0 && x != 0) return 0;
int i,sum=0;
while(x > sum){
sum *= 10;
sum += x%10;
x/=10;
}
return x == sum || sum /10 == x;
}
};