代码训练LeetCode(14)整数反转

代码训练(14)LeetCode之整数反转

Author: Once Day Date: 2024年4月9日

漫漫长路,才刚刚开始…

全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客

参考文章:

  • 190. 颠倒二进制位 - 力扣(LeetCode)
  • 7. 整数反转 - 力扣(LeetCode)
  • 力扣 (LeetCode) 全球极客挚爱的技术成长平台

文章目录

      • 代码训练(14)LeetCode之整数反转
        • 1. 原题
        • 2. 分析
        • 3. 代码实现
        • 4. 总结

1. 原题

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

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

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

这个任务是一个数字处理问题,我们要把一个32位有符号整数中的数字翻转过来,并且要注意处理溢出的情况。如果翻转后的整数超过了给定的32位有符号整数范围,就返回0。

2. 分析

题目要求我们实现一个函数,输入一个32位有符号整数x,输出一个整数,它是x的数字部分翻转后的结果。如果翻转后的结果超出了[-2^31, 2^31 - 1]的范围,就返回0。

翻转一个整数的数字可以通过取模和除法操作来完成。我们可以循环地从x中提取每一位数字,然后将它添加到结果变量中,同时考虑到符号和溢出的问题。

分析步骤

  1. 初始化一个变量来存储翻转后的整数。
  2. 处理整数x的符号,并在处理过程中使用绝对值。
  3. 使用循环结构,每次循环:
    • 通过取模操作获取x的最低位数字。
    • 通过除法操作将x的最低位移除。
    • 将结果变量乘以10,并加上提取的数字,实现翻转。
    • 在每次操作后检查是否有溢出情况发生。
  4. 根据原始整数的符号,返回翻转后的结果,如果有溢出则返回0。

假设输入整数为123,我们希望得到翻转后的整数321。

  1. 初始化结果变量为0。
  2. 第一次循环:
    • 取模:123 % 10 = 3
    • 除法:123 / 10 = 12
    • 翻转:0 * 10 + 3 = 3
  3. 第二次循环:
    • 取模:12 % 10 = 2
    • 除法:12 / 10 = 1
    • 翻转:3 * 10 + 2 = 32
  4. 第三次循环:
    • 取模:1 % 10 = 1
    • 除法:1 / 10 = 0
    • 翻转:32 * 10 + 1 = 321
  5. 结束循环,输出翻转后的整数321。

主要操作是循环中的基本算术运算,这里除法可以进行一些优化,比如同时返回商和除数,不过这个属于指令优化范畴。

此外,还可以优化一下边界值判断和循环过程,比如对于32位整数,范围是[-2147483648, 2147483647],可以排除0值和-2147483648这两种情况,然后取绝对值进行反转操作。

同时要注意到,如果数字不超过9位,是不需要进行过多判断的,因为不管怎么反转,9位数是不会超过32位有符号整数的表示范围。只需要对10位数进行判断,如果低9位数反转后超过了214748364大小,这个10位数必然超过了范围,直接返回零值即可。

3. 代码实现
int reverse(int x){
    int i, temp;
    int abs_x, result;

    if (x == 0x80000000) {
        return 0;
    }

    if (x == 0) {
        return 0;
    }

    abs_x = x < 0 ? -x : x;
    result = 0;
    for (i = 0; i < 9; i++) {
        temp = abs_x % 10;
        abs_x = abs_x / 10;
        result = result * 10 + temp;
        if (abs_x == 0) {
            goto end;
        }
    }

    if (result > 214748364) {
        return 0;
    }
    result = result * 10 + abs_x;

end:
    return x < 0 ? -result:result;
}

这个函数的作用是反转一个有符号整数,并返回反转后的结果:

  1. 首先判断输入的整数 x 是否为 0x80000000(即 -2^31,INT_MIN)或 0,如果是则直接返回 0,因为这两个数反转后会溢出。
  2. x 的绝对值赋给变量 abs_x,用于后续计算。
  3. 初始化结果变量 result 为 0。
  4. 使用循环进行反转操作,最多循环 9 次:
    • 取出 abs_x 的最低位数字,即 abs_x % 10,赋给变量 temp
    • abs_x 除以 10,去掉最低位数字。
    • result 乘以 10,再加上 temp,即将当前位数字添加到结果的末尾。
    • 如果 abs_x 已经为 0,说明所有位都处理完毕,跳转到 end 标签处。
  5. 在循环结束后,判断 result 是否大于 214748364(即 INT_MAX / 10),如果是,说明反转后的数字溢出了,返回 0。
  6. 如果 result 未溢出,将 abs_x 的最后一位数字添加到 result 的末尾。
  7. end 标签处,根据原始输入 x 的正负性,决定返回 result 的正负形式。

这个函数通过循环取出整数的每一位数字,并将其反转拼接到结果中,最后根据原始整数的正负性返回相应的结果。函数还考虑了整数溢出的情况,如果反转后的整数超出了 32 位有符号整数的范围,则返回 0。

运行结果如下所示(仅供参考):

在这里插入图片描述

4. 总结

这个编程题测试了对基本算术运算的理解,以及对整数溢出问题的处理。重点应该放在熟练掌握基本的运算和逻辑控制,以及增强对边界情况处理的意识。在解决类似问题时,编写清晰且易于理解的代码是非常重要的。

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

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

相关文章

基于springboot和vue的社团管理系统(含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot和vue的社团管理系统1有三种角色 管理员&#xff1a;社团管理、类型管理、成员管理、活动管理、通知管理、费用管理等 团长&#xff1a;审核入团申请、发布活动、发布通知…

【教学类-52-03】20240412动物数独(4宫格)难度1-9 打印版

作品展示&#xff1a;合并打印&#xff08;难度10%-90%&#xff0c;一共9份&#xff09; 背景需求 前期两个代码完成了4宫格基本样式的制作 【教学类-52-01】20240411动物数独&#xff08;4宫格&#xff09;宫格图https://mp.csdn.net/mp_blog/creation/editor/137679361【教学…

投资组合中是否应该包括黄金

最近有朋友问我&#xff0c;你对黄金怎么看&#xff1f;现在可以买黄金吗&#xff1f; 这些问题问的很好啊。首先表明我的观点&#xff1a;黄金是投机不是投资&#xff0c;黄金的长期投资价值极低&#xff0c;在我的投资组合中配置黄金的比例不会超过5%。 可能有些朋友会反对…

LeetCode-416. 分割等和子集【数组 动态规划】

LeetCode-416. 分割等和子集【数组 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;01背包问题&#xff0c;动规五部曲解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分…

MySQL知识整理

MySQL知识整理 基础第一讲&#xff1a;基础架构&#xff1a;一条SQL查询语句是如何执行的&#xff1f;架构尽量减少长连接的原因和方案为什么尽量不要依赖查询缓存 索引第四讲&#xff1a;深入浅出索引&#xff08;上&#xff09;第五讲&#xff1a;深入浅出索引&#xff08;下…

图机器学习导论

图&#xff1a;描述关系数据的通用语言&#xff0c;起源于哥尼斯堡七桥问题 传统的机器学习&#xff1a;数据样本之间独立同分布&#xff0c;简单拟合数据边界&#xff0c;在传统的机器学习中&#xff0c;每个数据样本彼此无关。传统的神经网络&#xff0c;只能处理简单的表格、…

鱼眼摄像头畸变校正方法概述

1. 摘要 鱼眼摄像头以其独特的广阔视场和其他特点&#xff0c;在各个领域得到了广泛应用。然而&#xff0c;与针孔相机相比&#xff0c;鱼眼摄像头存在显著的畸变&#xff0c;导致拍摄的图像失畸变严重。鱼眼摄像头畸变是数字图像处理中常见的问题&#xff0c;需要有效的校正技…

产品3D模型在线展示快速实现教程

产品3D模型可以向潜在客户提供360度的观察角度&#xff0c;比平面图形的效果更好。快速实现产品3D模型的在线展示最简单的方法是使用NSDT 3DConvert的模型内嵌特性&#xff0c;无需任何开发工作&#xff0c;5分钟就可以完成&#xff1a; NSDT工具推荐&#xff1a; Three.js AI纹…

Python网络爬虫中JSON格式数据存储详解

目录 一、引言 二、JSON格式数据简介 三、Python中处理JSON数据 四、网络爬虫中获取JSON数据 五、存储JSON数据到文件 六、从文件中读取JSON数据 七、注意事项和常见问题 八、总结 一、引言 在网络爬虫的应用中&#xff0c;JSON格式数据以其轻量级、易读易写的…

备忘录模式:恢复对象状态的智能方式

在软件开发中&#xff0c;备忘录模式是一种行为型设计模式&#xff0c;它允许捕获并外部化对象的内部状态&#xff0c;以便在未来某个时刻可以将对象恢复到此状态。这种模式是撤销操作或者回滚操作的关键实现机制。本文将详细介绍备忘录模式的定义、实现、应用场景以及优缺点。…

基于51单片机智能家居空气质量监控—温湿度PM2.5

基于51单片机智能家居空气质量监控 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.检测温度、湿度、PM2.5浓度&#xff0c;并在LCD1602实时显示; 2.可以使用按键设置温湿度上下限、P…

rabbitmq安装rabbitmq-delayed-message-exchange插件

下载地址&#xff1a;Community Plugins | RabbitMQ 上传到rabbitmq安装目录的/plugins目录下 我的是/usr/lcoal/rabbitmq/plugins/ 直接安装 [rootk8s-node1 rabbitmq]# rabbitmq-plugins enable rabbitmq_delayed_message_exchange [rootk8s-node1 rabbitmq]# rabbitmq-pl…

UE源码编译报了403之后

今天编译一个早期版本的ue引擎&#xff0c;发现报了一个错误&#xff0c;如下图&#xff1a; 如上图所示。 第一反应是被墙了&#xff0c;然后发现并不是。查了下官方文档&#xff0c;发现是更新了一个下载检测。更新地址https://github.com/EpicGames/UnrealEngine/releases/t…

图片壁纸社区app前后端开源小程序源码

图片壁纸社区APP前后端开源小程序源码&#xff0c;修改了开源版的前端样式&#xff0c;变成图片社区&#xff0c;也可以用来作为壁纸 源码下载地址抄笔记 (chaobiji.cn)

信号完整性的常见术语概念(面试常用)

目录 术语 概念一览 1&#xff0e;信号完整性&#xff08;Signal Integrity&#xff09; 2&#xff0e;传输线&#xff08;Transmission Line&#xff09; 3&#xff0e;特性阻抗&#xff08;Characteristic Impedance&#xff09; 4&#xff0e;反射&#xff08;Reflecti…

【分享】跨境虾皮Shopee各区域商品详情API返回值(商品,订单,面单等)♥

虾皮(shopee)是一个亚洲区域的电商平台&#xff0c;主要在东南亚地区提供电商服务。虾皮提供了丰富的电商数据&#xff0c;包括商品数据、订单数据、会员数据、评价数据等。 虾皮Shopee♥♥​​​​​​​♥​​​​​​​♥​​​​​​​♥​​​​​​​♥ 1.授权 ​ 接口…

SpringBoo利用 MDC 机制过滤出单次请求相关的日志

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1.前言 2.MDC 是什么 3.代码实战 4.总结 1.前言 在服务出现故障时&#xff…

动态规划-简单多状态dp问题1

文章目录 1. 按摩师&#xff08;面试题 17.16&#xff09;2. 打家劫舍 II&#xff08;213&#xff09;3. 删除并获得点数&#xff08;740&#xff09;4. 粉刷房子&#xff08;LCR 091&#xff09; 1. 按摩师&#xff08;面试题 17.16&#xff09; 题目描述&#xff1a; 状态表…

字节码文件的组成

字节码文件的组成 字节码文件的组成1 以正确的姿势打开文件2 字节码文件的组成2.1 基本信息2.2 常量池2.3 字段2.4 方法2.5 属性 3 字节码常用工具3.1 javap3.2 jclasslib插件3.3 Arthas 4 字节码常见指令 字节码文件的组成 1 以正确的姿势打开文件 字节码文件中保存了源代码…

【数据结构】习题之链表的回文结构和相交链表

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《数据结构》 &#x1f389;前路漫漫亦灿灿 前言 今日的习题是关于链表的&#xff0c;分别是链表的回文结构和相交链表的判断。 链表的回文结构 题目为&#xff1a;链表的回文结…