难度:简单
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1: 输入: 121 输出: true
示例 2: 输入: -121 输出: false
········· 解释: 从左向右读, 为-121。从右向左读, 为121- 。因此它不是一个回文数。
示例 3: 输入: 10 输出: false
········· 解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:你能不将整数转为字符串来解决这个问题吗?
分析这道题,示例2已经告诉我们,所有负数不是回文数了,那么我们就只需要考虑正数即可。
方法一:(整数转为字符串法,字符串翻转比较)
思路:
- 将这个非负整数串(负数直接返回false),转换为字符串
- 将字符串翻转(使用Stringbuilder)
- 若字符串翻转前后是相同的,则返回true;否则,则返回false
代码:
class Solution {
public boolean isPalindrome(int x) {
if(x<0)
return false;
else{
String str = x+""; //将x转为字符串类型
StringBuilder sb = new StringBuilder(str);
return sb.toString().equals((sb.reverse().toString()));
}
}
}
补充:
- 字符串
(String)
类型不能直接使用reverse()
函数进行翻转,必须要放入StringBuilder
中之后才可以翻转 toString()
方法用于将其他类型的值转为String类型str1.equals(str2)
方法用于比较str1
与str2
这两个字符串是否相同
显然,这种方式调用了许多Java本身的库函数,而且转为字符串的方式本身就效率很低。虽然代码量极少也十分容易想到,但这并不是一个好方法。
方法二:(数学计算翻转法)
由于我们已经做过了No.7整数翻转,对数学计算翻转一定十分熟悉了,可以参考以下这篇博客
https://blog.csdn.net/qq_32755875/article/details/106083105
思路
- 使用数学计算法将整数翻转
- 再与翻转之前的比较
- 若相等返回true,不等返回false
代码
class Solution {
public boolean isPalindrome(int x) {
if(x<0)
return false;
int newNum = 0;
int x1 = x;
while(x1!=0){
newNum = x1%10+newNum*10;
x1 = x1/10;
}
return x==newNum;
}
}
效率明显提高了很多
官方题解的意思是翻转一半数字,效率并没有提高思考难度和代码量都不小。所以这里就不做分析展示啦。
https://leetcode-cn.com/problems/palindrome-number/solution/hui-wen-shu-by-leetcode/