LeetBook刷题笔记003:回文数(Java实现)
自己的解
//整数解
public boolean isPalindrome(int x) {
int t=0,n=x;
if(x<0)
return false;
while(x!=0){
t=t*10+x%10;
x/=10;
}
if(n==t)
return true;
return false;
}
//转换为字符串解
public boolean isPalindrome2(int x) {
if(x<0)
return false;
String str=Integer.toString(x);
int n=0,m=str.length()-1;
while(n<m){
if(str.charAt(n)!=str.charAt(m))
return false;
n++;
m--;
}
return true;
}
最优解
public boolean isPalindrome(int x) {
//先排除特殊情况:x为负数或末尾为0但x不为0
if (x<0 || (x%10==0 && x!=0)) {
return false;
}
//排除特殊情况后声明变量节省空间
int revertedNumber = 0;
while (x > revertedNumber) {
//x反转后值可能超过int范围
//只需获取x反转后的一半值即可,既节省提升效率也防止出错
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
//需要考虑x的奇偶性
//x为奇数需要将reveredNumber除以10(去除中间位)
//直接使用||列出两种情况进行返回非常简洁
return x==revertedNumber || x==revertedNumber/10;
}
//时间复杂度:O(logn)
//每次迭代都会将x除以10