判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 进阶: 你能不将整数转为字符串来解决这个问题吗? Related Topics 数学 👍 1333 👎 0
//转换为字符串在操作
public boolean isPalindrome1(int x) {
if (x<0)
return false;
if (x<10)
return true;
int len = (int) Math.log10(x) + 1;
int[] temp = new int[len];
for (int i=0;i<len;i++) {
temp[i] = x % 10;
x/=10;
}
for (int i=0;i<len/2;i++)
if (temp[i]!=temp[len-i-1])
return false;
return true;
}
//每次遍历完首尾各去掉一个数
public boolean isPalindrome(int x) {
if (x<0)
return false;
int len = (int) Math.log10(x) + 1;
int a=0;
for (int i=0;i < len/2;i++){
if ((a=x/(int)Math.pow(10,len-i*2-1)) != x%Math.pow(10,1)){
return false;
}
x-= a * (int)Math.pow(10,len-i*2-1);
x/=10;
}
return true;
}
//将数坎一半,进行对比
//解答成功: 执行耗时:9 ms,击败了99.41% 的Java用户 内存消耗:37.6 MB,击败了95.83% 的Java用户
public boolean isPalindrome(int x) {
if (x == 0) return true;
if (x < 0 || x % 10 == 0) return false;
int reversed = 0;
while (x > reversed) {
reversed = reversed * 10 + x % 10;
x /= 10;
}
return x == reversed || x == reversed / 10;
}
//解答成功: 执行耗时:11 ms,击败了49.17% 的Java用户 内存消耗:37.9 MB,击败了67.84% 的Java用户
public boolean isPalindrome3(int x) {
if (x<0)
return false;
if (x<10)
return true;
int len = (int) Math.log10(x) + 1;
int temp=0;
int a=0;
for (int i=0;i<len/2;i++){
a = x % 10;
temp = temp*10 + a;
x/=10;
}
return len%2==0?temp==x:temp==(x/10);
}