题目描述
判断一个整数是否是回文数。(进阶:你能不将整数转为字符串来解决这个问题吗?)
解题思路
常规思路是将整数转换成字符串(to_string()),然后就很容易了。下面只考虑进阶解法:
- 数学法:
- 对于数字的末位,直接取余就可以了,对于数字的首位,我们可以这么算。
- 首先用一个变量记录数字的最高位,比如 12321,可以标记
help为 10000。(关键) - 第一个末位为 1,第一个首位为
12321/10000=1,接下来我们需要计算 232 是否为回文,怎么计算呢? - 我们需要去掉首位和末位:可以采用
x % help / 10的方式,12321%10000==2321可以将最高位去掉,然后2321/10==232可以将最低为去掉。 - 最后不要忘记将
help/100。 - 注:此方法对于10201这种特殊的回文数字也是可以通过的,不需要特殊处理。
参考代码
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0)
return false;
int tmp = x;
int help = 1;
while(tmp >= 10){
help *= 10;
tmp /= 10;
}
while(x){ // 这里用 while(help) 也行
if(x / help != x % 10)
return false;
x = x % help / 10; // 注意:x = x / 10 % 10 这样不行!!! eg: 11
help /= 100;
}
return true;
}
};
本文介绍了一种不将整数转化为字符串的判断回文数的方法,通过数学运算比较整数的首位和末位,逐步去除首位和末位进行递归判断,适用于所有整数包括特殊的回文数字。
659

被折叠的 条评论
为什么被折叠?



