题目内容

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer

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

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

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

示例 1:

输入:x = 123
输出:321

示例 2:

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

示例 3:

输入:x = 120
输出:21

示例4

输入:x = 0
输出:0

提示:
−231−2^{31}−231 <= x <= 2312^{31}231 − 1

题解

个人题解:

class Solution {public:int reverse(int x) {bool positive = (x >= 0);int x_abs = abs(x);int result = 0;while (x_abs != 0) { //这里可以直接将括号内写为x_absint temp = x_abs % 10;if ((result > 214748364) || (result == 214748364 && temp >= 8) || (result < 0)) {  //==的使用!切记!result = 0;break; //这里可以直接写为return 0;}x_abs /= 10;result = result * 10 + temp; //result为什么还会出现负值导致溢出呢?}if (!positive) {result = -result;}return result;}
};

注解:

  1. 2312^{31}231为2147483648, 所以在倒数第二个循环就要判断是否越界。一旦越界,就不再把新的一位加上去了,否则会直接溢出。
  2. 为什么需要判断result < 0?
    因为在取绝对值的时候,存在越界问题。
int取值范围 Value
二进制 [−231-2^{31}−231, 231−12^{31}-1231−1]
十进制 [-2147483648, 2147483648]
十六进制 [0x80000000, 0x7fffffff]

当传入数据为-2147483648, 取abs()的时候会发生越界问题,得到的结果仍为-2147483648。

代码优化:

class Solution {public:int reverse(int x) {bool positive{x>=0};int x_abs = abs(x);int result = 0;while (x_abs){int temp = x_abs % 10;if (result > 214748364 || (result == 214748364 && temp >= 8) || result < 0){return 0;}result = result * 10 + temp;x_abs /= 10;}if(!positive){return -result;}return result;}
};

LeetCode-7.整数反转(越界问题)相关推荐

  1. [模拟|数位] leetcode 7 整数反转

    [模拟|数位] leetcode 7 整数反转 1.题目 题目链接 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输 ...

  2. 【LeetCode】整数反转

    package leetcode.editor.cn;//给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. // // 示例 1: // // 输入: 123 //输出: 32 ...

  3. 53 -leetcode 7. 整数反转

    //看看人家 写的多简单 INT_MIN INT_MAX 2^31 -1 -2^31 7. 整数反转 class Solution {public:int reverse(int x) {int fh ...

  4. php 反转一个整数,LeetCode PHP 整数反转

    友情提示:此篇文章大约需要阅读 2分钟16秒,不足之处请多指教,感谢你的阅读. 题目 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 32 ...

  5. LeetCode NO7. 整数反转

    给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0. 假设环境不允许存储 64 ...

  6. LeetCode 7. 整数反转 Reverse Integer 官网答案的条件判定的一点思考

    关于solution中的公式不知道是否清楚,在刚开始看的时候认为条件之一应当是rev<(Integer.min-pop)/10这个条件,因为rev*10+pop>Integer.min时才 ...

  7. C++ leetcode 7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    一.思路 转化成string, 有负号先去掉负号,然后从string的尾部开始遍历,每一个字符放到第一个另一个字符串中去. int reverse(int x) {if (x == 0)return ...

  8. leetcode 7整数反转和leetcode 9回文数

    关键代码片 while(x>reverseN){reverseN = reverseN * 10 + x%10;x = x/10;} while (x != 0) {int pop = x % ...

  9. LeetCode 7 整数反转

    解决方案 class Solution {public int reverse(int x) {String str = String.valueOf(x);String s = "&quo ...

  10. LeetCode 07. 整数反转

    原题描述 个人解法思路 class Solution { public:int reverse(int x) {int temp=0;//需要返回的最后结果while(x!=0){if(temp> ...

最新文章

  1. word2013插入excel对象报错_在 Excel 电子表格中插入对象
  2. Swagger UI
  3. 动物模型:急性肝脏损伤模型的构建及选择
  4. 记录所遇到的编译错误及解决方法
  5. 请不要做浮躁的嵌入式系统工程师(谨以此文与大家共勉)
  6. oracle 加全文索引,Oracle创建全文索引
  7. 知识蒸馏在推荐精排中的应用与实践
  8. IE-LAB网络实验室:HCNP培训机构 HCIE培训中心 HCIE认证培训 HCNA培训 华为面试考试时需要注意什么
  9. mac 思科 链路聚合_思科链路聚合协议实验.docx
  10. 图片识别不了小程序怎么办_图片转文字【小程序】
  11. 当微信小程序遇上filter~
  12. 联想天逸100-15ibd加装固态硬盘折腾记
  13. 前端代码编辑器VS Code 必装插件有哪些?
  14. HiHopeOS操作系统成为首个通过OpenHarmony 兼容性认证的软件发行版
  15. Windows系统移动/复制安装(和原来的系统无丝毫差别)
  16. c# listview控件上移下移功能函数
  17. 鉴释×中科院计算所丨OS2ATC 2020精彩回顾
  18. Springboot快递代取系统的设计与实现3i0v9计算机毕业设计-课程设计-期末作业-毕设程序代做
  19. 【视频教程】帝国CMS制作网站系列教程06
  20. Aov网络与拓补排序的实现

热门文章

  1. 最近邻插值算法 python实现
  2. [机器学习] focal loss:解决样本不平衡的一种通用方案
  3. Hbase数据结构+hbase shell基本语法
  4. jquery基本选择器:id选择器、class选择器、标签选择器、通配符选择器
  5. linux怎么修改内存缓存,Linux内存、缓存、Swap等修改
  6. python快速入门及进阶
  7. 字符串函数rpartition与partition
  8. w2金融股票分析— matplotlib库
  9. window自动备件软件
  10. Symfony路由配置教程【已在腾讯课堂开课】