题目描述:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
链接:leetcode-cn.com/problems/pa…
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
分析思路1
首先将这个数字转变为一个字符串
然后设置一个left和一个right指针,分别从两边向中间进行比较
解法1
class Solution {
public boolean isPalindrome(int x) {
if(x < 0) {
return false;
}
String str = x + "";
int left=0,right=0;
if(str.length()%2==0)
{
left=str.length()/2-1;
right=left+1;
}
else {
left=str.length()/2;
right=left;
}
while (left>=0) {
if(str.charAt(left) != str.charAt(right))
return false;
left--;
right++;
}
return true;
}
}
分析思路2
首先如果这个数字是一个负数,那么它不可能为一个回文数。
如果是正数,末尾数字为0,也不可能为一个回文数。
去除了这两种情况后,我们来分析,怎么判断它相等?
就是得到这个数字翻转一半的结果进行比较,如果这个数字的位数为偶数,那么这两个数字相等时,就证明了这是一个回文数;如果这是一个位数为奇数的,就将它的最后一个去掉比较,如果相等,则证明是回文数。
解法2
class Solution {
public boolean isPalindrome(int x) {
if(x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
//求出这个数字的翻转序列
int rev = 0;
while(x > rev) {
rev = rev * 10 + x % 10;
x = x / 10;
}
if(rev == x || rev / 10 == x) {
return true;
}
return false;
}
}