Palindrome Number
Determine whether an integer is a palindrome. Do this without extra space.
注:回数是指正读和倒读都一样的数,如121,234432
解题分析:
需要注意点
(1)负数不是回数
(2)个位数都是回数
思路:
(1)使用前一题的整数的倒序,将一个数倒序,然后和原值比较:存在的问题是可能有溢出,需要计算每一位,影响高效,有改进空间
(2)逐个比较最高位和最低位,不等跳出,相等就比较次高位和次低位,递归结束:高效,但难度是如何取得最高位和掐头去尾。
程序实现
(1)整数的倒序
bool isPalindrome(int x) {
long long y = 0;
int t = x;
for (; t > 0; t /= 10)
y = y*10 + t %10;
if(x == y)
return true;
return false; //如果溢出,肯定不等
}
(2)逐个比较最高位和最低位
bool isPalindrome(int x) {
if (x < 0)
return false;
int d = 1;
while (x / d >= 10) //计算取最高位所需的除数
d *= 10;
while (x)
{
int high_bit = x / d;
int low_bit = x % 10;
if (high_bit != low_bit)
break;
x = x % d / 10; //*掐头去尾*
d = d / 100; //每次踢出2位
}
if (x)
return false;
return true;
}
};
时间: 2024-10-07 21:22:24