当前位置: 首页 > news >正文

多解法详解与边界处理——力扣7.整数反转

在这里插入图片描述


【LeetCode 热题】整数反转 —— 多解法详解与边界处理

一、题目描述

给定一个 32 位有符号整数 x,将其数字部分进行反转,并返回反转后的整数。
如果反转后超出了 32 位有符号整数的范围 [−2^31, 2^31 − 1],则返回 0。

注意: 环境不允许存储 64 位整数。

示例

  • 输入:123 → 输出:321
  • 输入:-123 → 输出:-321
  • 输入:120 → 输出:21
  • 输入:0 → 输出:0

二、思路分析

1. 数字逐位反转(核心解法)

  • 利用数学运算:不断对 x % 10 取余得到末尾数字,逐位拼接到结果 res 中;

  • 每次拼接时,先检查是否会溢出 32 位整数范围:

    • 正数溢出条件:res > Integer.MAX_VALUE / 10res == Integer.MAX_VALUE / 10 && digit > 7
    • 负数溢出条件:res < Integer.MIN_VALUE / 10res == Integer.MIN_VALUE / 10 && digit < -8
  • 若即将溢出,直接返回 0。

这是官方推荐的 O(log n) 解法。


2. 字符串反转法(不推荐但直观)

  • 将整数转为字符串;
  • 处理负号,反转数字部分;
  • 转回整数时检查是否溢出。

虽然简单,但需要额外空间,性能不如逐位反转。


三、代码实现

方法一:逐位反转(推荐)

class Solution {public int reverse(int x) {int res = 0;while (x != 0) {int digit = x % 10;x /= 10;// 检查是否溢出if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && digit > 7)) {return 0;}if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && digit < -8)) {return 0;}res = res * 10 + digit;}return res;}
}

方法二:字符串反转法

class Solution {public int reverse(int x) {String s = Integer.toString(x);boolean negative = s.charAt(0) == '-';String numStr = negative ? s.substring(1) : s;StringBuilder sb = new StringBuilder(numStr);sb.reverse();String reversed = negative ? "-" + sb.toString() : sb.toString();try {return Integer.parseInt(reversed);} catch (NumberFormatException e) {return 0; // 溢出时返回 0}}
}

四、复杂度分析

  • 方法一(逐位反转)

    • 时间复杂度:O(log |x|),取决于整数位数。
    • 空间复杂度:O(1)。
  • 方法二(字符串反转)

    • 时间复杂度:O(n),n 为数字位数。
    • 空间复杂度:O(n),需要额外字符串存储。

五、总结

  • 本题的关键点在于 溢出判断,尤其是 res * 10 + digit 之前的检测。
  • 逐位反转法 是首选,性能最佳;
  • 字符串法 适合理解,但不满足常数额外空间的要求。

在面试中,建议优先写出 逐位反转法,并清晰解释溢出条件。


http://www.dtcms.com/a/423220.html

相关文章:

  • 网站开发 python网站员工风采
  • ptyhon 基础语法学习(对比php)
  • 热点新闻事件及评论杭州seo网站推广
  • FITC-Fucoidan用于生物材料表面修饰、药物载体构建、纳米颗粒功能化和分子追踪研究
  • 【LeetCode】52. N 皇后 II
  • web网页开发,在线%推荐算法学院培养计划,图书推荐,基于Python,FlaskWeb,用户和物品推荐MySql
  • 半导体制造业中如何检测薄膜的厚度?
  • Redis为什么快
  • 3D 和 4D 世界建模:综述(下)
  • VPS服务器时区设置与优化,提升系统时间准确性
  • 爆肝整理,性能测试-双十一等大促活动稳定性保障分析,一篇通透...
  • 网络维护网站足球比赛直播平台app免费
  • 新天力科技IPO进行时:技术引领未来,创新驱动发展
  • 从0到1构建高并发电商返利APP:基于Spring Cloud Alibaba的分布式架构设计与核心模块拆解
  • 土地质量地球化学调查与评价系统:科技赋能土地智慧治理
  • 网站开发一定得用html吗软件开发是用什么软件
  • Spring Boot 核心启动机制与配置原理剖析
  • 精读C++20设计模式——结构型设计模式:外观模式
  • How Can Objects Help Video-Language Understanding?论文阅读
  • 《AI智能体实战开发教程(从0到企业级项目落地)》全网上线|CSDN B站同步首发
  • Python学习历程——组织结构(包含for、if、while等等)
  • cronet从编译到修改之: 支持IP直连
  • 美团网站建设规划书俄罗斯搜索引擎入口 yandex
  • Java微服务知识点详细总结
  • 做网站需要哪些工程师网络优化岗位详细介绍
  • 南昌网站全新开发小型教育网站的开发建设开题报告
  • .NET开发中3秒判断该用 IEnumerable 还是 IQueryable
  • 【Java EE进阶 --- SpringBoot】Mybatis操作数据库(基础)
  • 【Docker + DockerCompose】安装步骤+演示
  • TLS全流程 + Nginx HTTPS配置实战 + 会话绑定 vs 复制的架构选型