【力扣】整数反转,判断是否溢出的数学解法

整数反转原题地址

方法一:数学

反转整数

如何反转一个整数呢?考虑整数操作的3个技巧:

  1. xmod10可以取出x的最低位,如x=123,xmod10=3。
  2. x/=10可以去掉x的最低位,如x=123,x/=10,x=12。
  3. x=x*10+y可以在x后面续上y,其中y是一位数,如x=123,y=4,x=x*10+y,x=1234。

假设要反转的整数为x,反转后的整数存储在变量rev中,rev一开始初始化为0,那么反复执行以下操作:

  1. digit=xmod10,取出x的最低位数。
  2. x/=10,去掉x的最低位数。
  3. rev=rev*10+digit,在rev后面续上digit。

直到x为0为止,此时rev存储的数据符合题目要求。

判断溢出

问题在于,如何判断插入后的数据是否超出[INT_MIN,INT_MAX]的范围,导致溢出?

我们来探索不等式INT\_MIN\leqslant n\leqslant INT\_MAX成立的充分必要条件。

先看右半边,即n\leqslant INT\_MAX

对于任意整数i,我们有i=\left \lfloor \frac{i}{10} \right \rfloor\times 10+i mod 10,如对于123,123/10=12,123mod10=3,123=12*10+3。

不等式化为:\left \lfloor \frac{n}{10} \right \rfloor\times 10+n mod 10=\left \lfloor \frac{INT\_MAX}{10} \right \rfloor\times 10+INT\_MAX mod 10,带入INT\_MAXmod10=7\left \lfloor \frac{n}{10} \right \rfloor=revnmod10=digit0\leqslant digit\leqslant 9

移项化简得:(rev-\left \lfloor \frac{INT\_MAX}{10} \right \rfloor)\times 10\leqslant 7-digit,记\left \lfloor \frac{INT\_MAX}{10} \right \rfloor=m

  1. 当rev=m时,如果还要推入数字,那么digit≤2,因为INT_MAX的最高位为2,此时不等式左边等于0,右边为正数,不等式恒成立。
  2. 当rev>m时,不等式左边至少是10,右边至多是7,不等式恒不成立。
  3. 当rev<m时,不等式左边至多是-10,右边至少是7-9=-2,不等式恒成立。

所以原不等式右半边成立的充分必要条件是rev\leqslant m,即rev\leqslant\left \lfloor \frac{INT\_MAX}{10} \right \rfloor。同理左半边成立的充分必要条件是rev\geqslant \left \lceil \frac{INT\_MIN}{10} \right \rceil

原不等式成立的充分必要条件是\left \lceil \frac{INT\_MIN}{10} \right \rceil\leqslant rev\leqslant\left \lfloor \frac{INT\_MAX}{10} \right \rfloor

// 方法一:数学
class Solution {
public:int reverse(int x) {int rev = 0;while (x){if (rev < INT_MIN / 10 || rev > INT_MAX / 10){return 0;}// rev后面续上x的最低位rev = rev * 10 + x % 10;// 去掉x的最低位x /= 10;}return rev;}
};

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

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

相关文章

IntelliJ IDE 插件开发 | (六)内部模式的使用

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听IntelliJ IDE 插件开发 |&#xff08;四&#xff09;来查收…

Java10-BigDecimal使用(位数、舍入、计算、比较、绝对值)

1、保留位数与舍入 1、BigDecimal.setScale(newScale, roundingMode)方法用于格式化小数点 newScale表示保留位数&#xff0c;roundingMode表示舍入模式&#xff0c;舍入模式一共有8种&#xff0c;其值分别从0到7。 ROUND_UP&#xff1a;0; // 向上舍入&#xff0c;远…

PCB正片和负片的区别与使用

PCB正片和负片的区别与使用 简单解释详细解释 简单解释 简单的来说&#xff0c;正片在电路板的表面&#xff08;指定是顶层和底层&#xff09;上保留我们绘图工具所画的线&#xff08;图案&#xff09;。 而负片则是将我们绘制的线&#xff08;图案&#xff09;进行腐蚀掉&am…

leetcode1079:游戏玩法分析——求留存率

求留存率 题目描述题解 题目描述 表&#xff1a;Activity --------------------- | Column Name | Type | --------------------- | player_id | int | | device_id | int | | event_date | date | | games_played | int | --------------------- &#xff08;player_id&…

mysql如何备份某些库的某些表

MySQL备份数据库 mysql如何备份某些库的某些表 要备份某个库里的部分表&#xff0c;该如何操作&#xff1f; 例如&#xff1a;要备份db01库里的20张表&#xff0c;表很多又不想备份整个库 或者要备份多个库里的不同表&#xff0c;又如何操作&#xff1f; 例如&#xff1a;备份…

JIT逆优化引发的Java服务瞬时抖动 问题排查解决方案

目录 一、背景 二、前期排查&#xff08;失败&#xff09; 三、使用神器JFR 四、学习JIT&思考解决方案 五、最终的解决方案 五、总结 一、背景 我们有一个QPS较高、机器数较多的Java服务&#xff1b;该服务的TP9999一般为几十ms&#xff0c;但偶尔会突然飙升至数秒&a…

OnlyOffice:释放无限创意,打造高效协作新体验

Onlyoffice &#x1f496;前言一、&#x1f4ab;开发者版本介绍二、&#x1f4ab;开发者版本特点三、&#x1f4ab;最新版重磅来袭&#xff0c;8.0版本介绍1.显示协作者头像2.插件 UI 界面更新 四、✨Windows部署ONLYOFFICE1.安装Erlang2.安装RabbitMQ3.安装Redis4.安装Postgre…

ts总结4、TypeScript 的数组类型

一、TS中的数组类型:所有成员的类型必须相同,但是数据量可以是无限量的,当然也可以是零成员 二、写法 数组的第一种写法: // 第一种:在数组成员的类型后面,加上一对方括号。let arr:number = [1,2,3];// 上例解析:数组arr的类型是number[],其中number表示数组成员类…

Spring boot 集成redis

一、使用spring bootspring-boot-starter-data-redis 导入maven包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> spring boot配置文件 spring.re…

PyTorch自动微分模块torch.autograd的详细介绍

torch.autograd 是 PyTorch 深度学习框架中的一个核心模块&#xff0c;它实现了自动微分&#xff08;Automatic Differentiation&#xff09;的功能。在深度学习中&#xff0c;自动微分对于有效地计算和更新模型参数至关重要&#xff0c;特别是在反向传播算法中用于计算损失函数…

CSS:两列布局

两列布局是指一列宽度固定&#xff0c;另一列自适应。效果如下&#xff1a; HTML: <div class"container clearfix"><div class"left"></div><div class"right"></div> </div>公共 CSS&#xff1a; .con…

Elasticsearch:BM25 及 使用 Elasticsearch 和 LangChain 的自查询检索器

本工作簿演示了 Elasticsearch 的自查询检索器将非结构化查询转换为结构化查询的示例&#xff0c;我们将其用于 BM25 示例。 在这个例子中&#xff1a; 我们将摄取 LangChain 之外的电影样本数据集自定义 ElasticsearchStore 中的检索策略以仅使用 BM25使用自查询检索将问题转…

【Spring Boot 3】【JPA】嵌入式对象

【Spring Boot 3】【JPA】嵌入式对象 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费或…

14.2 url后端过滤器(❤❤)

14.2 过滤器 1. 过滤器Filter1.1 配置形式实现过滤器1.2 过滤器生命周期1.3 过滤器特性(面试点)1.4 注解形式实现过滤器1.5 两种实现的选择2. 应用2.1 字符集过滤:统一设置请求与响应字节编码1. 配置方式实现过滤器参数化:init-param标签关键代码完整代码2. 注解方式实现2.2 多…

【Vue】指令之列表循环、表单元素绑定

Vue指令[3] 列表循环、表单元素绑定v-for指令v-model指令 列表循环、表单元素绑定 v-for指令 作用&#xff1a;根据数据生成列表结构 数组经常和v-for结合使用数组长度的更新会同步到页面上面&#xff0c;是响应式的 语法&#xff1a;(item,index) in 数据&#xff0c;其中…

React Emotion 如何优雅的使用样式(一)

简介 Emotion 是一个专为使用 JavaScript 编写 css 样式而设计的库。它提供了强大且可预测的样式组合&#xff0c;以及源映射、标签和测试实用程序等功能为开发人员提供了出色的体验&#xff0c;并且支持字符串和对象样式。 与框架无关的样式应用包 Emotion中提供了一个与框…

每日一练 | 华为认证真题练习Day180

1、关于组播分发树&#xff0c;下面说法哪些是错误的 A. 组播分发树大体分为2种&#xff1a;SPT和RPT B. PIMSM协议既可以生成RPT树&#xff0c;又可以生成SPT树 C. PIMSSM协议既可以生成SPT树&#xff0c;也可以生成SPT树 D. PIMDM协议只能生成SPT树 2、BGP协议用Peer def…

2023 OpenHarmony 年度运营报告

汇聚 70 家企业 6700名贡献者力量&#xff0c; OpenHarmony 已成为下一代智能终端操作系统根社区&#xff1b; 我们在成长,OpenHarmony 项目群成员单位增至 35 家&#xff1b; 2023 年持续迭代更新 6 个版本及 OpenHarmony4.0 重点特性简介……

Stable Diffusion 模型下载:RealCartoon3D - V14

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十下载地址模型介绍 RealCartoon3D 是一个动漫卡通混合现实风格的模型,具有真实卡通的 3D 效果,当前更新到 V14 版本。 RealCartoon3D 是我上传的第一个模型。我仍在学习这些东西,但…

计算机毕业设计 基于SpringBoot的线上教育培训办公系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…