题目地址:回文数
看到这个题目的第一反映还是将整数转换为字符串,然后将其前面一半和后面一半进行比较:
class Solution {
public boolean isPalindrome(int x) {
//如果是负数,不是回文数
if (x < 0) {
return false;
} else {
//如果个位数,一定是回文数
if (x < 10){
return true;
}else {
//将x转换为字符串
String chs = Integer.toString(x);
//遍历字符串的前一半
for (int i = 0; i < (chs.length() / 2); i++){
//如果字符串的该位置字符和其对称位置的字符不一致,则不是回文数
if (chs.charAt(i) != chs.charAt(chs.length() - 1 - i)){
return false;
}
}
}
}
return true;
}
}
结果:
貌似时间和空间效率都不高。
官方使用的是将后面一半数字进行反转和前面一半进行比较:
class Solution {
public boolean isPalindrome(int x) {
//x小于10;x的最后一位为0,且不为0都不是回文数
if ( x < 0 || (x % 10 == 0 && x !=0)){
return false;
}
int res = 0;
//如果x小于res表示已经反转了一半位数的数字了,res表示反转后的数字
while(x>res){
res = res*10 + x%10;
x /= 10;
}
//如果位数是奇数,最中间的数字可以忽略,所以将反转后的数字再除10再和前一半比较
return x == res || x==res/10;
}
}
结果:
时间提上去了。