题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
思路
题目要求不能使用字符串解决,很自然的想到将数字分成前半部分和后半部分。将后半部分反转后与前半部分进行比较,如果两者一直则是回文数。这对于int类型而言是很容易实现的,因为后半部分可以通过x%10得到最后一位的值,前半部分则可以通过x/10去掉最后一位值。退出循环的条件是:后半部分的值>前半部分的值。
特殊情况:
- int为负数时,一定不是回文数;
- int的最后一位是0时,一定不是回文数。
通过上述思路进行代码实现。
代码
class Solution {
public boolean isPalindrome(int x) {
if(x<0||(x%10==0&&x!=0)){return false;}//特殊情况
int reverse=0;//储存后半部分翻转字符的数字
while(reverse<x){//后半部分数字大于等于前半部分时,退出循环。此时数据已经切分完成
reverse=reverse*10+x%10;
x=x/10;
}
return reverse==x||reverse/10==x;//数字位数为偶数时,reverse==x;数字尾数为奇数时,reverse/10==x.
}
}
复杂度分析
- 时间复杂度:O(logn)
- 空间复杂度:O(1)