Palindrome Number

我的思路:首先,求出x的位数,然后用一个数组存储其每一位的数字。接下来,用一个for循环判断是否回文。注意,这里如果得到的数组中的数字是从个位开始到最高位排序的。如果不用for循环判断是否回文,而是将数组中第一个数字作为最高位来求出该数组表示的一个数,时间复杂度要更高,且存在溢出,会报错。

代码:

(1)回文方式

class Solution {
public boolean isPalindrome(int x) {
if(x<0)
return false;
int y=x,k=1;
while(y>=10){
y/=10;
k++;
}
int[]arr=new int[k];
int z=x;
for(int i=0;i<k;i++){
arr[i]=z%10;
z/=10;
}
boolean flag=true;
for(int i=0;i<k/2;i++)//判断是否回文的for循环
if(arr[i]!=arr[k-i-1]){
flag=false;
break;
}
return flag;
}
}

(2)非回文方式:存在溢出,会报错,且当sum显然超出Integer.MAX_VALUE时,sum始终等于Integer.MAX_VALUE。原因在于当Math.pow函数值超过了Integer.MAX_VALUE时,将其强制转换成int型时,其值恒等于Integer.MAX_VALUE!

class Solution {
public boolean isPalindrome(int x) {
if(x<0)
return false;
int y=x,k=1;
while(y>=10){
y/=10;
k++;
}
int[]arr=new int[k];
int z=x;
for(int i=0;i<k;i++){
arr[i]=z%10;
z/=10;
}
int sum=0;
for(int i=0;i<k;i++){
sum+=arr[i]*Math.pow(10,k-i-1);
}
return sum==x;
}
}

当前打败了100%JAVA用户的思路:直接用个循环求出倒过来的数的值,将其与原值比较看是否相等。不用考虑溢出,溢出之后y为负值,肯定与x不相等。

class Solution {

public boolean isPalindrome(int x) {
if(x<0)
return false;
if(x<10)
return true;
int y=0,z=x;
while(z>0){//关键部分
y=y*10+z%10;
z/=10;
}
return x==y;
}
}

 

posted @ 2019-10-09 16:13  xbc121  阅读(163)  评论(0编辑  收藏  举报