当前位置: 首页 > ds >正文

力扣7:整数反转

力扣7:整数反转

  • 题目
  • 思路
  • 代码

题目

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

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

思路

这道题我们可以分成两部分来做,一是完成反转二是检测是否溢出。
我们先说第一部分,想要完成反转我们可以一位一位的插入数字,但是返回值和参数都是整数类型所以我们只能使用数学方法来完成插入。我们每次都让参数对10进行取模也就是得到最后一位数字number,再让返回值*10+number。这样就可以完成数学方法的插入了。
第二部分也是最关键的部分,如何判断是否溢出,2^31-1=2147483647。这是一个十位数字所以我们判断的关键也就是十位数字。我们先假设如果参数x就是2147483647,反转过来就是7463847412这明显是溢出了但是我想让大家思考一下,反转过来的数字y它的最后一位是多少?当然仅仅是在x为十位数字的时候,我们可以发现y的最后一位也就是x的首位它不就只有两个值吗1或者2,因为参数x也不能溢出啊。所以说是判断十个数字是否溢出其实我们只需要判断前九位是否溢出就可以。那么怎么判断是否溢出呢?也很简单,既然只需要判断前九位是否溢出我们直接判断y是不是小于INT_MAX/10不就可以了。对于负数也是一样的只需要判断y是不是大于INT_MIN/10即可。也就是说整个判断的条件就是INT_MIN/10<y<INT_MAX/10,只要y在这个范围内就算最后还要插入第十位数字我们也可以保证不会溢出因为第十位只能是1或者2。

代码

class Solution {
public:int reverse(int x) {int res = 0;while (x != 0) {// 提前判断下面给res插入数字后会不会溢出//判断前九位即可if (res < INT_MIN / 10 || res > INT_MAX / 10) {return 0;}int number = x % 10;x /= 10;res = res * 10 + number;}return res;}
};
http://www.xdnf.cn/news/16666.html

相关文章:

  • golang--通道和锁
  • 做了一款小而美的本地校验器
  • jimfs:Java内存文件系统,脱离磁盘IO瓶颈利器
  • 使用Docker在Rocky Linux 9.5上在线部署LangFlow
  • 【力扣热题100】哈希——两数之和
  • 基于深度学习的医学图像分析:使用3D CNN实现肿瘤检测
  • 智慧工地系统:科技赋能建筑新未来
  • 采用黑翅鸢优化算法BKA-CNN-LSTM、CNN-LSTM、LSTM、CNN四模型多变量回归预测,多输入单输出(Matlab)
  • nifi 访问Kerberos的kafka集群
  • 【行测】常识判断1
  • 图解系统的学习笔记--硬件结构
  • 【安卓笔记】OOM与内存优化
  • Sentinel 不同层面的流控保护
  • Ubuntu、pytorch、mamba安装
  • SD卡简介与驱动开发
  • kotlin基础【3】
  • C++模板元编程从入门到精通
  • Java设计模式-通俗举例
  • 项目上线中的跨域问题
  • 2025年人工智能三大突破:多模态推理、具身智能与全球治理
  • 【计算机网络】OSI七层模型
  • 重生之我在暑假学习微服务第三天《Docker-上篇》
  • 前端工程化常见问题总结
  • Ubuntu lamp
  • 前端静态资源优化
  • selenium 特殊场景处理
  • 手游遇攻击为何要用游戏盾SDK?
  • 常用设计模式系列(十五)—解释器模式
  • WAIC 2025深度解析:当“养虎”警示遇上机器人拳击赛
  • 《计算机“十万个为什么”》之 [特殊字符] 序列化与反序列化:数据打包的奇妙之旅 ✈️