一、题目
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
- -231 <= x <= 231 - 1
二、题解
反转一半,进行对比,以121做例子:
- x=121,m=0
- x=12,m=1
- x=1,m=12
当x>m不成立时就说明已经反转了一半,奇数为一半多一位,偶数为一半 - 返回比较判断值, x = = m x==m x==m偶数, x = = m / 10 x==m/10 x==m/10奇数;
三、代码
import java.util.Scanner;
public class isPalindrome_9 {
public static boolean isPalindrome(int x) {
// 反转后面一半
// 特殊情况
if (x < 0 || (x % 10 == 0 && x != 0)) { // 负数不是,01210不正确
return false;
}
// 当原始数字小于或等于反转后的数字时,就意味着我们已经处理了一半位数的数字了
int m = 0;
while(x > m){
m = m*10 + x%10;
x /= 10;
}
return x == m || x == m/10; // 1221 || 121
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
System.out.println(isPalindrome(num));
}
}
四、结果
五、说明
本文章仅用于记录个人做题记录
由于本人是个小菜鸡(实锤),题目解法并非最优,且解题过程中参考(抄袭)各大佬解题方法,望见谅。