class Solution {
public boolean isPalindrome(int x) {
/**
解法1:首尾对比(复杂,且空间复杂度大)
int i=0;
int y=x;
if(x<0){
return false;
}else{
while(y/10>0){
i++;
y=y/10;
}
i++;
}
int[] arr=new int[i];
for(int j=0;j<i;j++){
arr[j]=x/(int)(Math.pow(10,j))%10;
}
for(int q=0;q<i;q++){
if(arr[q]!=arr[i-1-q]){
return false;
}
}
return true;
*/
//解法2:切成前后两半,后一半逆序反转,判断前后一半是否相等(减少循环次数)
int i=0;
int y=x,q=x;
int reverseNumber=0;
if(x<0){
return false;
}else{
while(y/10>0){
i++;
y=y/10;
}
i++;
}
for(int j=0;j<i/2;j++){
reverseNumber=reverseNumber+q/(int)(Math.pow(10,j))%10*(int)(Math.pow(10,i/2-1-j));
x=x/10;
}
if(i%2==0){
if(x!=reverseNumber){
return false;
}else{
return true;
}
}else{
x=x/10;
if(x!=reverseNumber){
return false;
}
else{
return true;
}
}
}
}
回文数(首尾判断+切半反转)
最新推荐文章于 2024-10-05 19:23:25 发布