第一种解法,是将整数转换为字符串,排除x<0这种必不为回文数的情况,和x=0这种必为回文数的情况,x>0的情况以字符串中间位置为界,循环判断两侧字符是否相等。
import java.util.Scanner;
public class Palindrome9 {
public static void main(String[] args) {
System.out.println("请输入一个整数");
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
System.out.println(isPalindrome(x));
}
public static boolean isPalindrome(int x) {
if(x<0){
return false;
}
if(x==0){
return true;
}
//处理x>0的情况
String str = String.valueOf(x);
int len=str.length();
for (int i = 0; i < len/2; i++) {
if(str.getBytes()[i]!=str.getBytes()[len-i-1]){
return false;
}
}
return true;
}
}
第二种解法,不将整数转换为字符串,那么可以试想,如果每次取得回文数的最末尾数字,除了第一次,后面每次取都将前面的数乘以10,最后应该得到最原始的x
((((个位)*10+十位)*10+百位)。。。。。)= x
class Solution {
public boolean isPalindrome(int x) {
if(x==0){
return true;
}
if(x<0 || x%10==0){
return false;
}
int temp=x;
int y=0;
while(temp!=0){
y=y*10+temp%10;
temp/=10;
}
return x==y;
}
}
提交结果显示,第二种方法比第一种运行时间更短,效率更高。