给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
示例 4:
输入:x = -101
输出:false
思路1:数字翻转
定义一个变量,用来存储该数从后往前遍历的结果,通过取模和取余的结果计算,可以将回文数的后半部分翻转,同时修改回文数,当变量大于或者等于回文数,进行判断
举例:
回文数 1234321
1234321 % 10 = 1
1234321 / 10 = 123432
123432 % 10 = 2
1 * 10 + 2 =12
123432 / 10 = 12343
12343 % 10 = 3
12 * 10 + 3 =123
12343 / 10 = 1234
class Solution {
public boolean isPalindrome(int x) {
if(x == 0){
return true;
}
if(x < 0 || x % 10 == 0){
return false;
}
int last = x;
int now = 0;
while(now < last){
now = now * 10;
now += last % 10;
last = last / 10;
}
if(now == last || now / 10 == last){
return true;
}else{
return false;
}
}
}
思路2:转字符串+双指针
String.valueOf(x) 转字符串
public boolean isPalindrome(int x) {
if(x < 0){
return false;
}
String string = String.valueOf(x);
char[] chars = string.toCharArray();
int left = 0;
int right = string.length() - 1;
while(left < right){
if(chars[left] != chars[right]){
return false;
}
left++;
right--;
}
return true;
}
}