LeetCode刷题记录

创建于

回文数

https://leetcode-cn.com/problems/palindrome-number

给出一个整数,判断它是否是回文数,121是,0是,-1不是,-121不是

第一种解法 理论上比较差的一种:转成String然后比较一下就可以

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public boolean isPalindrome(int x) {
if(x<0){
return false;
}

String str=Integer.toString(x);
int len=str.length();
for(int i=0;i<=len/2;i++){
if(str.charAt(i)!=str.charAt(len-1-i)){
return false;
}
}
return true;
}
}

执行用时:10 ms

内存消耗:39.1 MB

第二种解法 官方题解,把数的后面一半倒过来,和前一半比较

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public boolean isPalindrome(int x) {
if(x<0||(x%10==0&&x!=0))return false;//这里,如果是10的倍数,一定也不是回文数
int re=0;
while(x>re) {//判断什么时候已经到达了一半:re比x小或者相等,就说明到了一半了
re=re*10+x%10;
x/=10;
}
return (re==x)||(re/10==x);//偶数个数字,就是相等; 奇数个数字的时候,循环结束(12321)时,re是123,x是12,而最中间那个3不会影响回文数,所以直接去掉最中间的数字3后相等也可
}
}

执行用时 :9 ms, 在所有 Java 提交中击败了99.19%的用户

内存消耗 :39.2 MB, 在所有 Java 提交中击败了5.14%的用户

奇怪的是,第二种方法没有开新的String,只用了一个int,反而内存用的多…