
LeetCode - 按标签分类刷题(字符串题解)——回文串系列
发布日期:2021-05-07 21:21:52
浏览次数:25
分类:精选文章
本文共 2350 字,大约阅读时间需要 7 分钟。
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。以下是详细的方法和步骤:
方法一:字符串反转法
特殊情况处理:
- 如果整数小于0,直接返回false,因为负数无法成为回文数。
- 如果整数为0,返回true。
- 如果整数的最后一位是0,且整数不为0,返回false,因为这样的数无法成为回文数。
将整数转换为字符串:
- 使用字符串表示来便于操作和反转。
反转字符串:
- 创建一个反转后的字符串。
比较字符串:
- 判断原字符串和反转后的字符串是否相等。
返回结果:
- 如果相等,返回true;否则返回false。
代码示例
public class Solution { public boolean isPalindrome(int x) { // 处理特殊情况 if (x < 0) return false; if (x == 0) return true; if (x % 10 == 0) return false; // 除0以外,数不以0结尾 // 将整数转换为字符串 String str = Integer.toString(x); // 反转字符串 String reversedStr = new StringBuilder(str).reverse().toString(); // 比较 return str.equals(reversedStr); }}
方法二:数学反转法
处理特殊情况:
- 如果x < 0,返回false。
- 如果x == 0,返回true。
- 如果x % 10 == 0,返回false。
初始化变量:
div
用于截取数字的最高位。revertedNumber
用于存储反转后的数字。x
逐步缩小范围,直到无法再进行比较。
循环处理:
- 每次截取当前数字的最高位和最低位进行比较。
- 如果最高位和最低位不相等,返回false。
- 缩小数字范围,继续循环。
处理奇数位情况:
- 如果数字长度为奇数,最后一步不需要比较中间的最高位和最低位。
返回结果:
- 如果所有对应位数相等,返回true。
代码示例
public class Solution { public boolean isPalindrome(int x) { // 处理特殊情况 if (x < 0) return false; if (x == 0) return true; if (x % 10 == 0) return false; // 除0以外,数不以0结尾 int revertedNumber = 0; int div = 1; while (x > revertedNumber) { int digit = x % 10; if (digit < 0) { return false; } revertedNumber = revertedNumber * 10 + digit; x /= 10; // 处理div while (x / div >= 10) { div *= 10; } } // 判断是否为偶数位或奇数位 return x == revertedNumber || x == revertedNumber / 10; }}
方法三:巧妙的反转法
处理特殊情况:
- 如果x < 0,返回false。
- 如果x % 10 == 0,返回false,除非x == 0。
反转数字:
- 使用取余和除法操作,逐步反转数字。
比较数字:
- 在反转过程中,逐步比较两边的数字是否相等。
处理奇偶位数:
- 如果数字长度为偶数,直接比较两边是否相等。
- 如果数字长度为奇数,最后一步不需要比较中间的最高位和最低位。
代码示例
public class Solution { public boolean isPalindrome(int x) { // 处理特殊情况 if (x < 0 || (x % 10 == 0 && x != 0)) { return false; } int revertedNumber = 0; while (x > revertedNumber) { int digit = x % 10; revertedNumber = revertedNumber * 10 + digit; x /= 10; } return x == revertedNumber || x == revertedNumber / 10; }}
总结
以上方法均可用于判断一个整数是否是回文数。选择哪种方法取决于具体的性能需求和代码复杂度。字符串反转法简单易懂,适合大多数情况,而数学反转法则更高效,适合处理大数问题。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月25日 19时16分04秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Mybatis【5】-- Mybatis多种增删改查那些你会了么?
2019-03-05
计算输入的一句英文语句中单词数
2019-03-05
lvs+keepalive构建高可用集群
2019-03-05
6 个 Linux 运维典型问题
2019-03-05
取消vim打开文件全是黄色方法
2019-03-05
一个系统部署多个tomcat实例
2019-03-05
HP服务器设置iLO
2019-03-05
从头实现一个WPF条形图
2019-03-05
使用QT实现一个简单的登陆对话框(纯代码实现C++)
2019-03-05
QT :warning LNK4042: 对象被多次指定;已忽略多余的指定
2019-03-05
GLFW 源码 下载-编译-使用/GLAD配置
2019-03-05
针对单个网站的渗透思路
2019-03-05
Typescript 学习笔记六:接口
2019-03-05
02、MySQL—数据库基本操作
2019-03-05
OpenJDK1.8.0 源码解析————HashMap的实现(一)
2019-03-05
MySQL-时区导致的时间前后端不一致
2019-03-05
2021-04-05阅读小笔记:局部性原理
2019-03-05
go语言简单介绍,增强了解
2019-03-05
python file文件操作--内置对象open
2019-03-05