题目
难度简单
给你一个整数 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
提示:
-231 <= x <= 231 - 1
进阶:你能不将整数转为字符串来解决这个问题吗?
解法一:
首先想到的是用字符串 反转然后看看 反转后的字符串与其是否相同。
class Solution {
public static boolean isPalindrome(int x) {
String str = String.valueOf(x);
StringBuffer sb = new StringBuffer(str);
if(str.equals(sb.reverse().toString())){
return true;
}
else{
return false;
}
}
}
下面这个代码更加简洁:
作者:MisterBooo
链接:https://leetcode-cn.com/problems/palindrome-number/solution/dong-hua-hui-wen-shu-de-san-chong-jie-fa-fa-jie-ch/
来源:力扣(LeetCode)
class Solution {
public boolean isPalindrome(int x) {
String reversedStr = (new StringBuilder(x + "")).reverse().toString();
return (x + "").equals(reversedStr);
}
}
要注意stringbuilder 和stringbuffer 不能用.equals 进行比较,而string可以,所以要转化成string进行比较。
解法二:
不通过转换字符串,通过一位一位将整型的数反转过来 再比较:(还要注意溢出的问题)
class Solution {
public static boolean isPalindrome(int x) {
int a=0;
int y=x;
if(x<0){
return false;
}
while (x!=0){
if(a*10/10!=a) {
return false;
}
a=a*10+x%10;
x=x/10;
}
if(a==y){
return true;
}
else {
return false;
}
}
}
解法三(优)
取出后半段数字进行翻转。
x<0肯定不是,x的最后一位是0 (0除外) 肯定不是回文数
可能是奇数位回文数 ,可能是偶数位回文数,要注意一下这个。
class Solution {
public static boolean isPalindrome(int x) {
int a=0;
if(x<0||(x%10==0&&x!=0)){
return false;
}
while (x>a){
a=a*10+x%10;
x=x/10;
}
return x==a||x==a/10;
}
}
其他解法:
可以将数字的第一位和最后一位比较,比较完之后x掐头去尾 再进行比较。 第一位可以通过一次一次x/10直到x=0 计次数得到 。