class Solution {
public:
bool isPalindrome(int x) {
//int div = 1;
//if (x < 0)
// return false;
//else if (x == 0)
// return true;
//else
//{
// while (x / div >= 10) div *= 10;
// while (x>0)
// {
// if (div < 1)
// return true;
// int left = x / div;
// int right = x % 10;
// if (left == right) //是==不是=
// {
// x = (x - left*div - right) / 10; //忘了再除以10,不行的
// div /= 100;
// }
// else
// return false;
// }
//}
//网上找的方法
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;
}
public:
bool isPalindrome(int x) {
//int div = 1;
//if (x < 0)
// return false;
//else if (x == 0)
// return true;
//else
//{
// while (x / div >= 10) div *= 10;
// while (x>0)
// {
// if (div < 1)
// return true;
// int left = x / div;
// int right = x % 10;
// if (left == right) //是==不是=
// {
// x = (x - left*div - right) / 10; //忘了再除以10,不行的
// div /= 100;
// }
// else
// return false;
// }
//}
//网上找的方法
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;
}
};
这个自己写的被注释掉了,提交一直有问题,不知道怎么回事。下面是网上找的。
这个题首先要注意的是,不能占用额外空间,所以不能转换为字符串。在一个是比如1000021这种的数字,要考虑去掉首尾的数字后,计算机默认的是2,但是我们需要比较的是第二位的0和倒数第二的2,所以要提取出这两位的数字,要用/和%。其中/要除以一个事先算好的数,程序中是div。