题目:9. 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例1:
输入: 121
输出: true
示例2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
思路:这道题一看提交记录两年前做过。。。转字符串的方法比较简单就没写了,主要是翻转的方法,把数字折半翻转,如果位数是偶数直接比较大小是否相等,比如1221,折半翻转后12=12即为回文数;如果是偶数对比除中间位的两个数大小,如12521,折半翻转后12=12即为回文数。
代码复现部分就是两个数字一边除10,一边乘10的过程,一直到右半边的翻转数字不小于左边数字为止,另外需要注意负数、以0结尾的非零数都是特殊情况需要单独考虑。
代码:
class Solution {
public:
bool isPalindrome(int x) {
//负数、以0结尾的非零数
if(x<0 || x&&x%10==0)
return false;
int s=0;
while(s<x){
s=s*10+x%10;
x/=10;
}
//分别处理整数长度是偶数或者奇数的情况
if(s==x||x==s/10)
return true;
return false;
}
};
运行结果:
此外剩下的时间刚好把之前的课程表2复现了一遍。