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

整数反转原题地址

方法一:数学

反转整数

如何反转一个整数呢?考虑整数操作的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;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

26 使用 Samba 实现文件共享

Samba 文件共享服务 Samba 服务程序现在已经成为在 Linux 系统与Windows 系统之间共享文件的最佳选择 详细配置请转Samba服务 安装 [rootlocalhost ~]# yum install samba -ySamba 服务程序的主配置文件&#xff0c;只有 37 行。 第 5&#xff5e;8 行参数中所提到的 cups…

仰暮计划|“用心感悟使我获取了艺术真谛,自律如始让我获得了人生成功,我将继续在艺术道路上走下去”

口述人:郭敬东&#xff08;男&#xff09; 整理人:马静 口述人与整理人关系:姥爷与外孙女 口述人基本信息:现60岁&#xff0c;1963年出生于湖北省大悟县刘集镇金鼓村&#xff0c;1987年移居到河南省焦作市&#xff0c;现居河南省焦作市高新区。 引言:在得知要讲述自己的经历…

企业数字化转型面临什么挑战?

数字化转型是一个复杂且持续的过程&#xff0c;涉及将数字技术集成到组织的各个方面&#xff0c;从根本上改变组织的运营方式和为客户提供价值的方式。虽然具体的挑战可能因企业的性质和规模而异&#xff0c;但一些常见的挑战包括&#xff1a; 1.抵制变革&#xff1a; 文化阻…

STM32单片机的基本原理与应用(七)

超声波测距实验 基本原理 超声波测距实验是STM32单片机通过控制HC-SR04超声波模块&#xff0c;使其发送超声波&#xff0c;遇到物体反射回超声波来实现距离测量&#xff0c;其原理就是在发射超声波到接收超声波会有一段时间&#xff0c;而超声波在空气中传播的速度为声速&…

python打包exe,并发布windows服务实践

操作实践 1、编写python程序&#xff0c;按照自己的需求编写 以下是案例 # -*- coding:utf-8 -*- import win32serviceutil import win32service import win32event import win32timezone #不加导入&#xff0c;打包后运行会报错&#xff0c;原因未知&#xff0c;暂时不…

小白Linux学习笔记-Linux内核

Linux内核 文章目录 Linux内核WHEREWHATmoudules.dep 文件depmod 命令depmod 实验lsmod 命令modinfo 命令内核模块的观察实验 内核模块的加载与移除:insmod, modprobe, rmmodinsmod 命令modprobe 命令rmmod 命令内核模块的加载与移除实验 内核模块的额外参数设定:/etc/modprobe…

二道经典OJ题带你入门回溯剪枝算法

风起于青萍之末 浪成于微澜之间 &#x1f3a5;个人主页 &#x1f525;个人专栏 &#x1f3a5;前期回顾-环形链表 目录 回溯算法的简介 N皇后问题 思路 代码测试 N皇后 思路 判断一竖列是否有皇后 判断对角线是否有皇后 代码测试 回溯算法的简介 回溯是递归的副产品&#xff0…

计算机设计大赛 深度学习+python+opencv实现动物识别 - 图像识别

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

5-2、S曲线计算【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍S曲线的基本变换&#xff0c;将基本形式的S曲线变换成为任意过两点的S曲线&#xff0c;为后续步进电机S曲线运动提供理论支撑 一.计算目标 ①计算经过任意不同两点的S曲线方程 ②可调节曲线平…

Zephyr NRF7002 实现AppleJuice

BLE的基础知识 ble的信道和BR/EDR的信道是完全不一样的。但是范围是相同的&#xff0c;差不多也都是2.4Ghz的频道。可以简单理解为空中有40个信道0~39信道。两个设备在相同的信道里面可以进行相互通信。 而这些信道SIG又重新编号&#xff1a; 这个编号就是把37 38 39。 3个信道…

「HarmonyOS」CustomDialogController自定义弹窗使用方法

需求背景&#xff1a; 在开发的过程中&#xff0c;总会遇到一些功能需要使用到弹窗进行信息的输入和修改&#xff0c;如用户个人信息的修改&#xff1b;在UI设计上每个App通常都会有各自的样式&#xff0c;而不是使用系统的标准样式&#xff0c;所以通常我们需要进行自定义弹窗…

C++学习Day04之常函数和常对象

目录 一、程序及输出1.1 常函数1.1.1 不能修改对象的成员变量1.1.2 常函数可以被常对象和非常对象调用 1.2 常对象1.2.1 对象的成员变量不能被修改1.2.2 只能调用常函数&#xff0c;不能调用非常函数1.2.3 const_cast 调用非常函数 1.3 常函数中或常对象修改成员变量 二、分析与…

DevOps落地笔记-17|度量指标:寻找真正的好指标?

前面几个课时端到端地介绍了软件开发全生命周期中涉及的最佳实践&#xff0c;经过上面几个步骤&#xff0c;企业在进行 DevOps 转型时技术方面的问题解决了&#xff0c;这个时候我们还缺些什么呢&#xff1f;事实上很多团队和组织在实施 DevOps 时都专注于技术&#xff0c;而忽…

zxxxxczzvdsgbhfdb

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 磁盘满的本质分析 专栏&#xff1a;《Linux从小白到大神》 | 系统学习Linux开发、VIM/GCC/GDB/Make工具…

【Docker】.NET Core 6.0 webapi 发布上传到Docker Desktop并启动运行访问,接口返回数据乱码解决方法

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

进程控制(Linux)

进程控制 一、进程创建1. 再识fork2. 写时拷贝 二、进程终止前言——查看进程退出码1. 退出情况正常运行&#xff0c;结果不正确异常退出 2. 退出码strerror和errno系统中设置的错误码信息perror异常信息 3. 退出方法exit和_exit 三、进程等待1. 解决等待的三个问题2. 系统调用…

使用pandas将excel转成json格式

1.Excel数据 2.我们想要的JSON格式 {"0": {"raw_data1": "Sam","raw_data2": "Wong","raw_data3": "Good","layer": "12v1"},"1": {"raw_data1": "Lucy…

外汇天眼:大量的平庸操作无济于事,少数的杰出操作改变人生

回顾我们的人生&#xff0c;道路虽然漫长&#xff0c;经历虽然众多&#xff0c;但紧要处其实只有关键的几步。 在关键时刻处理得最好的人就会拥有最成功的事业; 回顾我们所交过的朋友&#xff0c;虽然数量像天上的繁星&#xff0c;但真正对自己的人生有重大影响的&#xff0c;不…

NUUO 网络摄像头命令执行漏洞

一、设备简介 NUUO NVR是中国台湾省NUUO公司旗下的一款网络视频记录器&#xff0c;该设备存在远程命令执行漏洞&#xff0c;攻击者可利用该漏洞执行任意命令&#xff0c;进而获取服务器的权限。 网络视频记录器的CPU为Marvell Kirkwood 88F6281&#xff0c;CPU架构为基于ARMv5…

LLM(大语言模型)——大模型简介

目录 概述 发展历程 大语言模型的概念 LLM的应用和影响 大模型的能力、特点 大模型的能力 涌现能力&#xff08;energent abilities&#xff09; 作为基座模型支持多元应用的能力 支持对话作为统一入口的能力 大模型的特点 常见大模型 闭源LLM&#xff08;未公开源…