1、题干
给你一个整数 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
2、解题
数字的处理通常有两种方式。
第一种求余法,结合数字除以10,可以从尾部逐个获取数字;
第二个转字符串,对转成的字符串可以逐个字符进行处理。
方法一:(Java工具方法)
直接通过字符串反转的方式进行字符串比较。这种方式在web项目开发中经常用到,但如果是考算法的话,不建议。
代码示例:
java
public static boolean isPalindrome(int x) {
if (x < 0) {
return false;
}
String s = String.valueOf(x);
String reverse = StringUtils.reverse(s);
return StringUtils.equals(s,reverse);
}
方法二:(转字符串+左右指针法)
将数字转字符串,结合左右指针法,依次取出最左和最右未校验的字符进行比较处理。
代码示例:
java
public static boolean isPalindrome(int x) {
if (x < 0) {
return false;
}
String s = String.valueOf(x);
int start = 0;
int end = s.length() - 1;
while (start <= end) {
char startC = s.charAt(start++);
char endC = s.charAt(end--);
if (startC != endC) {
return false;
}
}
return true;
}
方法三:(数字处理:求余+整除)
通过求余+整除的方式,可以逐个取出末尾的数字,在反向乘10求和得出反转值。
代码示例:
java
public static boolean isPalindrome(int x) {
if (x < 0) {
return false;
} else if (x==0){
return true;
} else if (x%10==0){
return false;
}
int temp = x;
int reverseSum =0;
while (temp>0){
reverseSum = reverseSum*10 + temp%10;
temp = temp/10;
}
return x == reverseSum;
}
向阳前行,Dare To Be!!!