👨🎓作者:bug菌 ✏️博客:CSDN、掘金等 💌公众号:猿圈奇妙屋 🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。 🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。
题目:给你一个整数
x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
121 是回文,而 123 不是。示例1:
输入:x = 121
输出:true示例2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。题目来源:leetcode官网 难度:⭐⭐
最好实现的做法大家肯定都能想到,那就是先将这个整数转为一个字符串 ,然后将字符串分割成一个数组,然后只需要循环数组的一半长度进行判断对应的元素是否一一相等即可。
我们从直观上来看待回文数,就感觉像是将数字进行对折后看能否一一对应。所以这个解法的操作就是 取出后半段数字进行翻转。
这里需要注意的一个点就是由于回文数的位数可奇可偶,所以请看如下:
具体实现代码如下:
class Solution {
public boolean isPalindrome(int x) {
//将数字x装成一个字符串
String str = String.valueOf(x);
//进行遍历
for (int i = 0; i < str.length() / 2; i++) {
//只要存在对应位置值不相等,直接返回false
if (str.charAt(i) != str.charAt(str.length() - i - 1)) {
return false;
}
}
return true;
}
}具体实现代码如下:
class Solution {
public boolean isPalindrome(int x) {
//存在如下这些情况都可以直接返回了,铁定不是回文数。
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
//后半段
int revertNum = 0;
//取半
while (x > revertNum) {
revertNum = revertNum * 10 + x % 10;
x /= 10;
}
return x == revertNum || x == revertNum / 10;
}
}思路一之转字符串法leetcode提交运行结果截图如下:

思路二之翻转数字法leetcode提交运行结果截图如下:

综上所述,两种方法各有角度,虽然第一种思路是常能想到的,但是解题嘛,能按一种思路解决就是最好的。但还是要来进行对比一下,思路二就是直接利用的回文数的特点,只需对取半翻转对比,然后从数学角度进行出发去进行数字截取,明显是提高了算法运行效率。
... ...
再者,解题道路千万条,小伙伴们,你们如果有啥更好的想法或者思路,欢迎评论区告诉我哦,大家一起互相借鉴互相学习,方能成长的更快。
好啦,以上就是本期的所有内容啦,咱们下期见咯。