第一种解法,是将整数转换为字符串,排除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;}
}
提交结果显示,第二种方法比第一种运行时间更短,效率更高。