LeetCode 7 整数反转

题目描述

整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

提示:

  • -2^31 <= x <= 2^31 - 1

解法

  1. 转字符串反转

转为字符串后从后往前遍历反转

java代码

public int revers(int x) {String s = String.valueOf(x);// 如果第一个是-,则删除,标记有横杠boolean hasHyphen = false;if (s.charAt(0) == 45) {s = s.substring(1);hasHyphen = true;}StringBuilder resBuilder = new StringBuilder();// 注意点:1.末尾的0去掉,中间的0保留;2.如果会死负数,把-去掉;2.-2147483648超过了范围,返回0// 最后一位是否是0,如果是0,把末尾的0都去掉,遇到第一个非0后,不再去掉0;不是0,则不需要去0boolean deleteZero = s.charAt(s.length() - 1) == 48;for (int i = s.length() - 1; i > -1; i--) {// 如果需要删除0并且遇到了非0,则后面就不再去掉0if (deleteZero && s.charAt(i) != 48) {deleteZero = false;}// 如果是0并且需要删除0,则略过if (s.charAt(i) == 48 && deleteZero) {continue;}resBuilder.append(s.charAt(i));}String resString = resBuilder.toString();// 判断是否超过范围:负数的话不超过2147483648,整数的话不超过2147483647if ((hasHyphen && (resString.length() > 10 || (resString.length() == 10 && resString.compareTo("2147483648") > 0)))|| (!hasHyphen && (resString.length() > 10 || (resString.length() ==  10 && resString.compareTo("2147483647") > 0)))) {return 0;}int res = "".equals(resString) ? 0 : Integer.parseInt(resString);return hasHyphen ? -res: res;
}
  1. 官方解法:数学方法

记rev为翻转后的数字,为完成翻转,我们可以重复「弹出」x 的末尾数字,将其「推入」rev 的末尾,直至 x 为 0。

要在没有辅助栈或数组的帮助下「弹出」和「推入」数字,我们可以使用如下数学方法:

// 弹出 x 的末尾数字 digit
digit = x % 10
x /= 10// 将数字 digit 推入 rev 末尾
rev = rev * 10 + digit

题目需要判断反转后的数字是否超过 323232 位有符号整数的范围 [ − 2 31 , 2 31 − 1 ] [-2^{31},2^{31}-1] [231,2311]。例如 x = 2123456789 x=2123456789 x=2123456789反转后的 r e v = 9876543212 > 2 31 − 1 = 2147483647 {rev}=9876543212>2^{31}-1=2147483647 rev=9876543212>2311=2147483647,超过了 323232 位有符号整数的范围。

因此我们需要在「推入」数字之前,判断是否满足:

− 2 31 ≤ r e v ⋅ 10 + d i g i t ≤ 2 31 − 1 -2^{31}≤rev⋅10+digit≤2^{31}-1 231rev10+digit2311

若该不等式不成立则返回 0。

但是题目要求不允许使用 646464 位整数,即运算过程中的数字必须在 323232 位有符号整数的范围内,因此我们不能直接按照上述式子计算,需要另寻他路。

考虑 x>0的情况,记 I N T _ M A X = 2 31 − 1 = 2147483647 {INT\_MAX}=2^{31}-1=2147483647 INT_MAX=2311=2147483647,由于

在这里插入图片描述

则不等式

r e v ⋅ 10 + d i g i t ≤ I N T M A X rev⋅10+digit≤INT_MAX rev10+digitINTMAX

等价于

在这里插入图片描述

移项得

在这里插入图片描述

讨论该不等式成立的条件:

在这里插入图片描述

注意到当相等时若还能推入数字,则说明 x 的位数与 INT_MAX的位数相同,且要推入的数字 digit 为 x 的最高位。由于 x 不超过 INT_MAX,因此 digit 不会超过 INT_MAX 的最高位,即 digit≤2。所以实际上当 相等时不等式必定成立。

因此判定条件可简化为:当且仅当小于等于时,就成立。

x<0 的情况类似。

综上所述,判断不等式

− 2 31 ≤ r e v ⋅ 10 + d i g i t ≤ 2 31 − 1 -2^{31}≤rev⋅10+digit≤2^{31}-1 231rev10+digit2311

是否成立,可改为判断不等式

I N T M I N / 10 < = r e v < = I N T M A X / 10 INT_MIN / 10 <= rev <= INT_MAX / 10 INTMIN/10<=rev<=INTMAX/10

java代码:

class Solution {public int reverse(int x) {int rev = 0;  // 结果数字while (x != 0) {if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {return 0;}// 取余数int digit = x % 10;// 原数字除以10后,得到的商为下一位数字x /= 10;// 原来的rev*10等于向高位移动一位,再加上余数,就是新数字rev = rev * 10 + digit;}return rev;}
}

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

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

相关文章

【Android】使用intent.putExtra()方法在启动Activity时传递数据

食用方法 在Android中&#xff0c;你可以使用Intent对象来在启动Activity时传递数据。以下是一个示例&#xff0c;展示了如何在startActivity时传递数据到被启动的Activity&#xff1a; 在启动Activity的地方&#xff0c;创建一个Intent对象&#xff0c;并使用putExtra()方法…

【PPT模板合集】关于自制内容的PPT模板合集,包括原创的PPT及改良内容的PPT,适合科研/比赛/工作

【PPT模板合集】关于自制内容的PPT模板合集&#xff0c;包括原创的PPT及改良内容的PPT&#xff0c;适合科研/比赛/工作 零、前言一、校园层面的PPT模板1.1 各种毕业答辩1.2 夏令营答辩1.3 奖学金答辩1.4 比赛/项目答辩 二、学术层面的PPT模板2.1 学术汇报2.2 会议海报类型 三、…

代码随想录训练营第五十一天309.最佳买卖股票时机含冷冻期714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 题目链接 309. 买卖股票的最佳时机含冷冻期 - 力扣&#xff08;LeetCode&#xff09; 讲解链接 代码随想录 (programmercarl.com) 包含了冷冻期的股票买卖问题的dp数组结构更加复杂&#xff1a;代码随想录 (programmercarl.com) 包含了四种状态&a…

滚珠丝杆在各种自动化设备中的作用

滚珠丝杆因其具有高精度、高刚度和长寿命等特性&#xff0c;成为许多设备中的重要组成部分&#xff0c;在许多行业中都有广泛的应用&#xff0c;接下来我们看看滚珠丝杆的具体应用有哪些&#xff1f; 1、打孔机&#xff1a;提供精确的导向&#xff0c;使打孔机的滑块能够沿固定…

Vue3 详细教程及实例(完整版)

Vue3 详细教程及实例 文本插值 数据绑定的沟通形式是使用“Mustache”语法(双花字符串)进行文本插值: 在 Uniapp 中,我们可以使用 Vue3 的语法来实现文本插值。以下是一个简单的实例: 首先,我们需要在 <template> 标签内创建一个文本插值的模板:<template&g…

【算法每日一练]-图论(保姆级教程篇9 最小生成树 ,并查集篇)#道路修建 #兽径管理

目录 题目&#xff1a;道路修建 思路&#xff1a; 题目&#xff1a;兽径管理 思路&#xff1a; 题目&#xff1a;道路修建 思路&#xff1a; “让这些点全部连在一起的最小代价”很明显是最小生成树。绝对不能kruskal&#xff0c;存边一定会超内存。所以只能prim。 但是…

服务器购买推荐 首单、学生可薅羊毛优惠

服务器购买推荐 阿里云 # 云服务器新老同享仅99元/年 9## 学生爆款云服务器 t6 二选一 精选活动专区&#xff0c;您可了解阿里云当前所有优惠活动 腾讯云 轻量应用服务器 推广大使特惠产品合集页 阿里云 个人产品 # 云服务器新老同享仅99元/年 9## 学生爆款云服务器 …

解读免费化潮流:为何数据可视化软件向免费迈进?

近年来&#xff0c;我们见证了数据可视化软件呈现出明显的免费化趋势。这个趋势的背后隐藏着许多关键原因&#xff0c;影响着整个数据行业的发展和走向。为何数据可视化软件开始朝着免费方向发展&#xff1f;让我们一同深入探讨。 普及数字化需求&#xff1a; 数字化已经深入到…

力扣283题 移动零 双指针解法

移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出…

windows下使用iperf3

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、使用步骤1.下载2.解压3.测试1.作为服务器使用2.作为客户端使用 总结 前言 windows使用iperf3和linux是一样的&#xff0c;而且可以相互操作。 一、使用步骤…

类型断言,

在 TypeScript 中&#xff0c;类型断言是一种告诉编译器某个值的具体类型的方式。有两种主要的类型断言语法&#xff1a; 尖括号语法&#xff1a; let myValue: any This is a string; let stringValue: string <string>myValue; 在这个例子中&#xff0c;<string&…

Linux系统iptables扩展

目录 一. iptables规则保存 1. 导出规则保存 2. 自动重载规则 ①. 当前用户生效 ②. 全局生效 二. 自定义链 1. 新建自定义链 2. 重命名自定义链 3. 添加自定义链规则 4. 调用自定义链规则 5. 删除自定义链 三. NAT 1. SNAT 2. DNAT 3. 实验 ①. 实验要求 ②. …

mybatis关于namespace以及id以及Mapper接口命名的说明(了解)

1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO…

C/C++转义符:\x

文章目录 什么是转义符使用"\x"定义char数组宏定义中的\ 什么是转义符 在C语言中&#xff0c;转义符用于将一些特殊字符表示为单个字符&#xff0c;常用的转义符有&#xff1a; \\&#xff1a;反斜杠符号\&#xff1a;单引号\"&#xff1a;双引号\a&#xff1…

设计模式总览

一、设计模式 介绍 种一棵树最好的时间是十年前&#xff0c;其次是现在 《援助的死亡》-- 比萨莫约 The best time to plant a tree was 10 years ago。 The second best time is now。 《dead aid》-- Dambisa Moyo 1、创建型模式 1.1、单例模式 确保一个类最多只有一个实…

kendo-splitter动态分配分隔框大小

通过size方法&#xff0c;动态改变框大小&#xff0c;参考链接&#xff1a;https://docs.telerik.com/kendo-ui/api/javascript/ui/splitter/methods/size vue画面 <kendo-button type"primary" click"changePane">button</kendo-button><…

如何获取1688的订单详情

获取1688订单详情需要申请 第一步&#xff1a;先去1688-开放平台申请&#xff0c;申请不一定能通过&#xff0c;审批很严。 第二步&#xff1a;首次登录请先注册&#xff0c;注册成功后即可登录。 第三步&#xff1a;选择&#xff1a;我是第三方开发者 第三方是封装好的ap…

Ubuntu系统执行“docker ps“出现“permission denied“

当我们安装好Ubuntu时&#xff0c;使用鱼香ros一键安装指令 wget http://fishros.com/install -O fishros && . fishros 一键安装Docker后&#xff0c;执行"docker ps"出现"permission denied" seelina:~$ docker ps permission denied while …

解析编程中的技术迷题:常见挑战与应对策略

前言 在数字化时代的浪潮中&#xff0c;编程已经成为了一项至关重要的技能。无论是在软件开发、数据分析、人工智能还是互联网领域&#xff0c;编程都扮演着不可或缺的角色。作为一种创造性的活动&#xff0c;编程不仅仅是代码的书写&#xff0c;更是一种解决问题和创新的思维方…

.Net 8 Blazor下 Auto交互渲染模式试用

一、环境 C:\Users\zhuji>dotnet --version 8.0.100C:\Users\zhuji>dotnet --list-sdks 5.0.403 [C:\Program Files\dotnet\sdk] 6.0.404 [C:\Program Files\dotnet\sdk] 8.0.100 [C:\Program Files\dotnet\sdk] Microsoft Visual Studio Enterprise 2022 (64 位) - Cu…