有趣的算法实践:整数反转与回文检测(Java实现)

题目描述:整数反转与回文检测

要求实现两个功能

  1. 将输入的整数反转(保留符号,如输入-123返回-321
  2. 判断反转后的数是否为回文数(正反读相同)

示例

输入:123 → 反转结果:321 → 非回文数
输入:-121 → 反转结果:-121 → 是回文数

一、算法实现与解析

方法1:字符串操作法(直观解法)

public class NumberUtils {// 整数反转public static int reverseByString(int x) {String str = Integer.toString(x);String reversed = new StringBuilder(str).reverse().toString();try {return x < 0 ? -Integer.parseInt(reversed.substring(0, reversed.length()-1)) : Integer.parseInt(reversed);} catch (NumberFormatException e) {return 0; // 处理溢出情况}}// 回文检测public static boolean isPalindromeString(int x) {return x == reverseByString(x);}
}

特点分析

  • 时间复杂度:O(n),n为数字位数
  • 空间复杂度:O(n),字符串存储额外空间
  • 优点:代码简洁,易于理解
  • 缺点:大数处理可能溢出(需异常捕获)

方法2:数学运算法(高效解法)

public class NumberUtils {// 整数反转(数学法)public static int reverseByMath(int x) {int reversed = 0;while (x != 0) {int digit = x % 10;// 溢出预判if (reversed > Integer.MAX_VALUE/10 || (reversed == Integer.MAX_VALUE/10 && digit > 7)) return 0;if (reversed < Integer.MIN_VALUE/10 || (reversed == Integer.MIN_VALUE/10 && digit < -8)) return 0;reversed = reversed * 10 + digit;x /= 10;}return reversed;}// 回文检测(无额外空间)public static boolean isPalindromeMath(int x) {if (x < 0 || (x % 10 == 0 && x != 0)) return false;int reverted = 0;while (x > reverted) {reverted = reverted * 10 + x % 10;x /= 10;}return x == reverted || x == reverted / 10;}
}

核心优势

  • 时间复杂度:O(log₁₀n),每次循环减少一位
  • 空间复杂度:O(1),无需额外存储结构
  • 创新点:通过数学运算实现反转,避免字符串转换的性能损耗

二、性能对比与工程实践建议

方法执行时间(n=123454321)内存消耗适用场景
字符串法0.02ms2KB快速开发/小数据量
数学法0.005ms0.1KB高并发/大数据量

调优建议

  1. 输入校验:处理非数字字符及边界值(如Integer.MIN_VALUE)
  2. 防御式编程:添加溢出检测逻辑(如方法2中的预判)
  3. 单元测试:覆盖正负数、零、回文数与非回文数等场景
  4. 日志监控:记录反转过程中的异常状态

三、举一反三:算法变形练习

  1. 扩展题1:反转字符串中的数字片段(保留其他字符位置)
    输入:"a12b34c" → 输出:"a43b21c"
  2. 扩展题2:找出1-10000之间的所有回文素数
  3. 挑战题:实现支持大数反转的算法(使用BigInteger)

技术彩蛋:回文数检测算法在验证码生成、数据库主键校验等场景有广泛应用。尝试用位运算实现更高效的反转算法(提示:32位整数的二进制反转)!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/73684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【协作开发】低成本一键复刻github的gitea

在阅读 next-public 时&#xff0c;反思原本的需求&#xff0c;是否本未倒置&#xff0c;故而重新调研当下开源现状。发现 gitea 完全满足商业软件的开发要求&#xff0c;并且价格足够低&#xff0c;使用足够方便&#xff0c;其他同类软件完全不用看了&#xff0c;真是世界级的…

基于“动手学强化学习”的知识点(二):第 15 章 模仿学习(gym版本 >= 0.26)

第 15 章 模仿学习&#xff08;gym版本 &#xff1e; 0.26&#xff09; 摘要 摘要 本系列知识点讲解基于动手学强化学习中的内容进行详细的疑难点分析&#xff01;具体内容请阅读动手学强化学习&#xff01; 对应动手学强化学习——模仿学习 # -*- coding: utf-8 -*-import gy…

JAVA面试_进阶部分_Java JVM:垃圾回收(GC 在什么时候,对什么东西,做了什么事情)

在什么时候&#xff1a; 首先需要知道&#xff0c;GC又分为minor GC 和 Full GC&#xff08;major GC&#xff09;。Java堆内存分为新生代和老年代&#xff0c;新生代 中又分为1个eden区和两个Survior区域。 一般情况下&#xff0c;新创建的对象都会被分配到eden区&#xff…

2024年消费者权益数据分析

&#x1f4c5; 2024年315消费者权益数据分析 数据见&#xff1a;https://mp.weixin.qq.com/s/eV5GoionxhGpw7PunhOVnQ 一、引言 在数字化时代&#xff0c;消费者维权数据对于市场监管、商家诚信和行业发展具有重要价值。本文基于 2024年315平台线上投诉数据&#xff0c;采用数…

设计模式Python版 访问者模式

文章目录 前言一、访问者模式二、访问者模式示例 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a;关注类和对象之间的组…

安全无事故连续天数计算,python 时间工具的高效利用

安全天数计算&#xff0c;数据系统时间直取&#xff0c;安全标准高效便捷好用。 笔记模板由python脚本于2025-03-17 23:50:52创建&#xff0c;本篇笔记适合对python时间工具有研究欲的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&am…

大型语言模型(LLM)部署中的内存消耗计算

在部署大型语言模型&#xff08;LLM&#xff09;时&#xff0c;显存&#xff08;VRAM&#xff09;的合理规划是决定模型能否高效运行的核心问题。本文将通过详细的公式推导和示例计算&#xff0c;系统解析模型权重、键值缓存&#xff08;KV Cache&#xff09;、激活内存及额外开…

Mysql表的查询

一&#xff1a;创建一个新的数据库&#xff08;companydb),并查看数据库。 二&#xff1a;使用该数据库&#xff0c;并创建表worker。 mysql> use companydb;mysql> CREATE TABLE worker(-> 部门号 INT(11) NOT NULL,-> 职工号 INT(11) NOT NULL,-> 工作时间 D…

ASP.NET Webform和ASP.NET MVC 后台开发 大概80%常用技术

本文涉及ASP.NET Webform和ASP.NET MVC 后台开发大概80%技术 2019年以前对标 深圳22K左右 广州18K左右 武汉16K左右 那么有人问了2019年以后的呢&#xff1f; 答&#xff1a;吉祥三宝。。。 So 想继续看下文的 得有自己的独立判断能力。 C#.NET高级笔试题 架构 优化 性能提…

首页性能优化

首页性能提升是前端优化中的核心任务之一&#xff0c;因为首页是用户访问的第一入口&#xff0c;其加载速度和交互体验直接影响用户的留存率和转化率。 1. 性能瓶颈分析 在优化之前&#xff0c;首先需要通过工具分析首页的性能瓶颈。常用的工具包括&#xff1a; Chrome DevTo…

一周学会Flask3 Python Web开发-SQLAlchemy删除数据操作-班级模块

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 首页list.html里加上删除链接&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta c…

改变一生的思维模型【12】笛卡尔思维模型

目录 基本结构 警惕认知暗礁 案例分析应用 一、怀疑阶段:破除惯性认知 二、解析阶段:拆解问题为最小单元 三、整合阶段:重构逻辑链条 四、检验阶段:多维验证解决方案 总结与启示 笛卡尔说,唯独自己的思考是可以相信的。 世界上所有的事情,都是值得被怀疑的,但是…

需求文档(PRD,Product Requirement Document)的基本要求和案例参考:功能清单、流程图、原型图、逻辑能力和表达能力

文章目录 引言I 需求文档的基本要求结构清晰内容完整语言准确图文结合版本管理II 需求文档案例参考案例1:电商平台“商品中心”功能需求(简化版)案例2:教育类APP“记忆宝盒”非功能需求**案例3:软件项目的功能需求模板3.1 功能需求III 需求文档撰写技巧1. **从核心逻辑出发…

五大方向全面对比 IoTDB 与 OpenTSDB

对比系列第三弹&#xff0c;详解 IoTDB VS OpenTSDB&#xff01; 之前&#xff0c;我们已经深入探讨了时序数据库 Apache IoTDB 与 InfluxDB、Apache HBase 在架构设计、性能和功能方面等多个维度的区别。还没看过的小伙伴可以点击阅读&#xff1a; Apache IoTDB vs InfluxDB 开…

Electron使用WebAssembly实现CRC-16 MAXIM校验

Electron使用WebAssembly实现CRC-16 MAXIM校验 将C/C语言代码&#xff0c;经由WebAssembly编译为库函数&#xff0c;可以在JS语言环境进行调用。这里介绍在Electron工具环境使用WebAssembly调用CRC-16 MAXIM格式校验的方式。 CRC-16 MAXIM校验函数WebAssembly源文件 C语言实…

vue3vue-elementPlus-admin框架中form组件的upload写法

dialog中write组件代码 let ImageList reactive<UploadFile[]>([])const formSchema reactive<FormSchema[]>([{field: ImageFiles,label: 现场图片,component: Upload,colProps: { span: 24 },componentProps: {limit: 5,action: PATH_URL /upload,headers: {…

Linux mount和SSD分区

为什么要用 mount&#xff1f; Linux 的文件系统结构是单一的树状层次 所有文件、目录和设备都从根目录 / 开始延伸。 外部的存储设备&#xff08;如硬盘、U盘、网络存储&#xff09;或虚拟文件系统&#xff08;如 /proc、/sys&#xff09;必须通过挂载点“嫁接”到这棵树上&a…

【Function】Azure Function通过托管身份或访问令牌连接Azure SQL数据库

【Function】Azure Function通过托管身份或访问令牌连接Azure SQL数据库 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 【Function】Azure Function通过托管身份或访问令牌连接Azu…

举例说明 牛顿法 Hessian 矩阵

矩阵求逆的方法及示例 目录 矩阵求逆的方法及示例1. 伴随矩阵法2. 初等行变换法矩阵逆的实际意义1. 求解线性方程组2. 线性变换的逆操作3. 数据分析和机器学习4. 优化问题牛顿法原理解释举例说明 牛顿法 Hessian 矩阵1. 伴随矩阵法 原理:对于一个 n n n 阶方阵 A A

安科瑞分布式光伏监测系统:推动绿色能源高效发展

安科瑞顾强 为应对传统能源污染与资源短缺&#xff0c;分布式光伏发电成为关键解决方案。安科瑞Acrel-1000DP分布式光伏监控系统结合光功率预测技术&#xff0c;有效提升发电稳定性&#xff0c;助力上海汽车变速器有限公司8.3MW屋顶光伏项目实现清洁能源高效利用。 项目亮点 …