题目链接:回文数
题目描述:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
题目分析:这个问题是老生常谈了,但是考虑一下进阶的解法。额外转化为字符串需要消耗空间,我们可以直接对数字进行处理。不难看出,回文的特点是,两边轴对称,自然,两边的和也是相等的,那么我们可以求出一半的和,然后去判断是否相等就好了。
代码:
class Solution {
public boolean isPalindrome(int x) {
if(x<0||(x%10==0&&x!=0)) return false;
int half = 0;
while(x>half){
half = half*10+x%10;
x/=10;
}
//考虑奇偶位数
return x == half || x == half/10;
}
}