LeetCode第七题: 整数反转

题目描述

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

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

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

示例

给定一个32位的整数,你需要将这个整数中的每一对数字反转。如果反转后整数超过32位,你应当在前导数字中用0填充,以得到一个有效的32位整数。假设我们的环境只能存储32位大小的有符号整数,其数值范围是 [−2^31, 2^31 − 1]。你可以假设输入的数字不会超过这个范围。

解题思路 - 数字反转法

要反转一个整数,我们可以先将整数转换为字符串,然后反转字符串,最后将反转后的字符串转换回整数。但是这种方法可能会因为整数太大而超出32位整数的范围。因此,我们需要使用数学方法来反转数字,通过逐步构建反转后的整数,并确保每一步的结果都在32位整数的范围内。

Go语言实现 - 数字反转法

func reverse(x int) int {var result int = 0sign := 1if x < 0 {sign = -1x = -x}for x > 0 {pop := x % 10x /= 10if result > (1<<31-1)/10 || (result == (1<<31-1)/10 && pop > 7) {return 0 // 反转后的数超出32位整数范围}if result < -1<<31 {return 0 // 反转后的数超出32位整数范围}result = result*10 + pop}return result * sign
}

算法分析

  • 时间复杂度: O(log10(n)),因为我们需要遍历整数的每一位数字。
  • 空间复杂度: O(1),我们只使用了常数级别的额外空间。

这段代码首先检查输入的整数是否为负数,如果是,我们将其转换为正数并在最后应用符号。然后,我们通过循环遍历整数的每一位,将其添加到结果中。在每一步,我们都要检查结果是否超出了32位整数的范围。如果超出,我们返回0。最后,我们将结果乘以原始整数的符号,得到最终答案。

image

当然,除了上述的数学方法,我们还可以采用一种更直观的位操作的方法来解决这个问题。这种方法不依赖于数字的十进制表示,而是直接在二进制层面上进行操作。以下是使用位操作的Go语言实现:

Go语言实现 - 位操作法

func reverse(x int) int {var result int = 0for x != 0 {pop := x % 10 // 获取最低位x /= 10       // 移除最低位// 检查结果是否可能溢出if result > (1<<31-1)/10 || (result == (1<<31-1)/10 && pop > 7) {return 0}if (result * 10) > (1<<31-1) || (result * 10) + pop < -(1<<31) {return 0}result = result*10 + int(pop)}return result
}

算法分析

  • 时间复杂度: O(log10(n)),因为我们需要遍历整数的每一位数字。
  • 空间复杂度: O(1),我们只使用了常数级别的额外空间。

在这个版本中,我们使用了一个循环来逐位处理输入的整数。在每次迭代中,我们取出最低位的数字(pop),然后将其加到结果(result)上。同时,我们需要检查在每一步操作后,结果是否可能溢出32位整数的范围。如果会溢出,我们返回0。如果不溢出,我们继续处理下一位数字。

这种方法的优点是它不依赖于数字的十进制表示,因此不受数字大小的限制。它直接在二进制层面上进行操作,这使得它在处理非常大的整数时更加可靠。

image

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

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

相关文章

软考笔记--企业资源规划和实施

企业资源是指企业业务活动和战略运营的事物&#xff0c;包括人、财和物&#xff0c;也包括信息资源&#xff0c;同时也包括企业的内部和外部资源。企业资源可以归纳为物流&#xff0c;资金流和信息流。企业资源规划&#xff08;ERP&#xff09;是只建立在信息技术基础上&#x…

如何卸载Erlang以及RabbitMQ

参考以下两篇文章 https://blog.csdn.net/m0_49605579/article/details/130196536 Windows如何完全卸载RabbitMQ和Erlang_删除注册表hkey_local_machine\software\ericsson\erlang\e-CSDN博客 首先我是按照链接一的操作进行了卸载&#xff0c;但是Erlang的安装目录一直删除不…

Android 8.1 Power电源键增加Home键功能

Android 8.1 Power电源键增加Home键功能 近来接到客户需求&#xff0c;想要将电源键Power增加Home键功能&#xff0c;即当前页面在非Launcher时按下Power电源键&#xff0c;跳转到Launcher页面&#xff0c;具体修改参照如下&#xff1a; /frameworks/base/services/core/java…

铭瑄科技——为星闪技术发展与应用带来新推力

随着智能化生活逐渐普及&#xff0c;无线通信不仅是不仅是信息时代的重要基础设施&#xff0c;而且是推动社会向智能化发展的核心力量之一&#xff0c;其中短距无线通信更是推动未来智能化发展的关键。 为积极推动未来硬件智能化、产业智能化发展&#xff0c;铭瑄正式宣布成为星…

sql-函数

函数&#xff1a;一段可以直接被另一段程序调用的程序或代码。 字符串函数 函数功能CONCAT(s1, s2, …, sn)字符串拼接&#xff0c;将s1, s2, …, sn拼接成一个字符串LOWER(str)将字符串全部转为小写UPPER(str)将字符串全部转为大写LPAD(str, n, pad)左填充&#xff0c;用字符…

AI:141-利用自然语言处理改进医疗信息提取与分类

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

黑马头条-day10

文章目录 app端文章搜索1、文章搜索1.1 ElasticSearch环境搭建1.2 索引库创建①需求分析②ES导入数据场景分析③创建索引和映射 1.3 索引数据同步①app文章历史数据导入ES②文章实时数据导入ES 1.4 文章搜索多条件复合查询①关键词搜索②搜索接口定义 2、搜索历史记录2.1 需求说…

C#中的static关键字详解

在C#编程中&#xff0c;static关键字是一个非常常用的特性&#xff0c;它可以用于类、方法和成员变量。本文将详细解释C#中static关键字的含义、用途、与其他关键字的关系以及它如何在不同作用域中使用。同时&#xff0c;我们也会提供一些示例来帮助您更好地理解static关键字在…

【2024-02-25】360春招笔试两道编程题解

恭喜发现宝藏&#xff01;搜索公众号【TechGuide】回复公司名&#xff0c;解锁更多新鲜好文和互联网大厂的笔经面经。 作者TechGuide【全网同名】 订阅专栏&#xff1a; 【专享版】2024最新大厂笔试真题解析&#xff0c;错过必后悔的宝藏资源&#xff01; 第一题&#xff1a;函…

积分商城管理系统的设计与实现

积分商城管理系统的设计与实现 获取源码——》公主号&#xff1a;计算机专业毕设大全

javascript给对象添加迭代器

迭代器是啥就自行百度了 为啥for…of可以遍历数组&#xff0c;为啥不能遍历对象&#xff0c;就是for…of会调用迭代器&#xff0c;而数组是内置了迭代器了&#xff0c;而对象没有内置&#xff0c;所以直接使用for…of遍历对象会报错&#xff0c;因此只用在对象的原型上面自定义…

YOLO算法改进Backbone系列之:EfficientViT

EfficientViT: Memory Effificient Vision Transformer with Cascaded Group Attention 摘要&#xff1a;视觉transformer由于其高模型能力而取得了巨大的成功。然而&#xff0c;它们卓越的性能伴随着沉重的计算成本&#xff0c;这使得它们不适合实时应用。在这篇论文中&#x…

一般情况下,硬件中使用Repeating Sequence出现波形很奇怪就是数据的周期频率和mcu运行的频率不一致导致的

一般情况下&#xff0c;出现波形很奇怪就是数据的周期频率和mcu运行的频率不一致导致的 把timer values 修改为0 1就好了&#xff0c;如果是0&#xff0c;0.1就不行&#xff0c;不会有下面的波形

YOLOv9中的“RepNCSPELAN4”结构!

RepNCSPELAN4结构出炉啦&#xff0c;收藏起来写论文用&#xff01; 1.代码&#xff1a; 代码路径&#xff1a;yolov9-main->models->common.py&#xff0c;代码如下&#xff1a; class RepNCSPELAN4(nn.Module):# csp-elandef __init__(self, c1, c2, c3, c4, c51): # …

使用EFCore连接SQLite

简介 在使用EFCore连接SQLite之前我们先来了解一下SQLite SQLite是一个轻量级、自包含、无服务器、零配置的事务性SQL数据库引擎&#xff0c;它支持SQL92标准的大多数查询语言并兼容ACID事务。具体如下&#xff1a; 轻量级&#xff1a;SQLite非常轻巧&#xff0c;它的库体积…

UE5 C++ Gas开发 学习记录(三)

添加AuraPlayerState,AuraAbilitySystemComponentBase和AuraAttributeSet 在Build.cs里添加 // Copyright Epic Games, Inc. All Rights Reserved. using UnrealBuildTool; public class MyGas : ModuleRules { public MyGas(ReadOnlyTargetRules Target) : base(Target) { P…

leetcode hot100打家劫舍三

本题是打家劫舍的变形&#xff0c;数据结构是树形。涉及到树的题目一定要想清楚树的遍历顺序&#xff08;前中后序&#xff09;。之后再考虑利用动态规划来解决。 动态规划是一直记录状态&#xff0c;我们可以根据动态规划的数组来记录变化的状态&#xff0c;最终求的自己想要…

【算法笔记】ch01_01_0771 宝石与石头

笔记介绍&#xff1a; 本项目是datawhale发布的LeetCode 算法笔记&#xff08;Leetcode-Notes&#xff09;课程完成笔记&#xff0c;根据推荐题目循序渐进练习算法题目。主要用python进行书写相关代码&#xff0c;会介绍解题思路及跑通解法。 0771. 宝石与石头 题目大意 描…

Python字符串访问与拼接你搞懂了吗?

使用下标访问字符串&#xff0c;从0开始计数&#xff0c;-1表示最后一个字符。三种遍历字符串的方法&#xff1a;for循环、len()和enumerate()。字符串拼接只能是字符串之间使用&#xff0c;不能与数字拼接。 1.下标访问字符串 通过下标访问字符串的内容&#xff0c;下标从 0 …

Shell脚本介绍及脚本功能

文章目录 一、什么是shell二、hello word2.1 echo2.2第一个脚本 三、Bash的基本功能3.1别名3.2常用快捷键3.3输入输出3.4 输出重定向3.5 多命令执行3.6 管道符3.7 通配符和特殊符号 一、什么是shell Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。S…