LeetCode第9题-回文数-java实现-图解思路与手撕代码
一、题目描述
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
二、解题思路与代码实现
1.解题思路
原本设想构建一个字符数组,存储给定的数字,然后定义两个指针,分别从头和尾遍历这个数组,比较是否相同。
但是上述思路会占用n个长度的内存,这里考虑将数字后半部分分离出来,与前半部分进行比较。
不断去掉给定数字的个位数,加入到另一个数的末尾,最终比较两个数,即可判断是否是回文。
如果是奇数,最后生成的数字和原始的数字可能长度不同,将更长的那个除以10 ,再做比较即可。
2.代码实现
代码如下(示例):
private static boolean isPalindrome2(int x) {
if (x < 0) {
return false;
}
int temp = 0;
while (temp < x) {
temp = temp * 10 + x % 10;
x = x / 10;
}
return temp == x | temp / 10 == x;
}
总结
这道题本身并不难,但是其中算法比较的思想很有价值,最容易想到的算法并非最好的,在时间复杂度和空间复杂度方面需要从计算机的角度进行考量。