通过万岁!!!
- 题目:给你一个int的数,判断是不是回文数。
- 基本思路:如果是负数,则肯定不是,然后转换成字符串,用双指针判断即可,如果不满足条件,直接返回false。
- 不转换成String:那我们就通过int取余和取整,找到每个数,这里需要注意Math.log10(x)+1可以x的位数。但是这种方法反而速度更慢了,不太明白。
- 大佬的思路:不转换成string的时候,我用还是一一进行比对,其实这是没有必要的,这个数字最多9位,我们可以最后一块比对,并且我比对过程中用了很多的方法,所以效率不高。大佬的思路是我们定义一个res,然后这个数就是每次*10加上x的余数,然后x每次被10除。其中,退出条件是x不大于res了,然后最后判断x和res的大小。然后有些特殊情况,考虑到就行了
- 技巧:就是双指针
java代码——基本思想
class Solution {
public boolean isPalindrome(int x) {
if (x < 0) return false;
String strx = x + "";
int l = 0, r = strx.length() - 1;
while (l < r) {
if (strx.charAt(l) == strx.charAt(r)) {
l++;
r--;
} else {
return false;
}
}
return true;
}
}
java代码——不转换成String类型
class Solution {
public boolean isPalindrome(int x) {
if (x < 0) return false;
int r = (int) Math.log10(x) + 1, l = 1;
while (l < r) {
if ((int) (x % Math.pow(10, l) / Math.pow(10, l - 1)) ==
(int) (x % Math.pow(10, r) / Math.pow(10, r - 1))) {
r--;
l++;
} else {
return false;
}
}
return true;
}
}
java代码——大佬的思路
class Solution {
public boolean isPalindrome(int x) {
if (x == 0) return true;
if (x < 0 || x % 10 == 0) return false;
int res = 0;
while (x > res) {
res = res * 10 + x % 10;
x /= 10;
}
return res == x || x == (res / 10);
}
}
- 总结:题目比较简单,就是用双指针,我的思路虽然没有问题,但是就这个题来说的话速度还是比较慢了。还是需要看一下给定的限定条件的。大佬链接。



