判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
System.out.println(Solution.isPalindrome(n));
}
}
class Solution {
public static boolean isPalindrome(int x) {
if(x<0) return false;//如果是负数,则一定不是回文数
if(reverse(x)==x) //如果逆序处理之后与原数相同,则是回文数
return true;
return false; //不相同则不是
}
public static int reverse(int x) { //逆序方法
int reu=0;
while (x!=0)
{
int pop = x % 10;//弹出最后一位
x/=10;
/*
判断结果是否会溢出:
*/
if (reu>Integer.MAX_VALUE/10||(reu==Integer.MAX_VALUE/10&&pop>7)) return 0;
reu=reu*10+pop; //将pop压入到reu后面
}
return reu;
}
}
思路是先将不可能符合条件的负数除去,然后进行逆序处理(这里借用了之前整数翻转题目的代码,由于不存在负数,则省去了对负数溢出的判断),由于是判断回文数,根据其特点可以得知,如果逆序溢出了则定然不会是回文数,因此返回0也定然不会与原数相等,因此符合条件。官方题解中提到了可以优化为对原数的一半数位进行逆序处理再比较。