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

1.题目

题目链接
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

2.分析

2.1.除法运算

可以屏蔽整数的低位,保留高位
例如123 / 100 = 1,屏蔽了个位、十位,保留了百位。

2.2.取余运算

可以屏蔽整数的高位,保留低位
例如123 % 10 = 3,屏蔽了十位、百位,保留了个位。

2.3.按位遍历

可以通过反复"余10"、"除10"的过程来从低到高遍历整数的每一位。例如:

int x = 123;
while(x) {cout << x % 10;x /= 10;
}

输出为321。如果将结果存储在一个新数中,就相当于完成了"整数反转"的过程。

2.4.溢出判断

本题特殊点在于给出的整数在反转后是可能溢出的。那么首先我们得先知道32位有符号整数的上下限。在C++中,可以利用

cout << INT_MAX << endl;// 2147483647
cout << INT_MIN << endl;//-2147483648

来获取整数的最大值与最小值。这两个常量定义在limits.h中。
那么如何判断当前数反转后是否已经溢出呢?
情况1:
如果当前数反转后前9位的绝对值已经大于INT_MAX(INT_MIN)的前9位(214748364),并且该数还有剩余位没有被遍历,那么该数在反转完毕后一定会溢出:

//rev为当前反转后的结果
if (rev > INT_MAX / 10 || rev < INT_MIN / 10) {return 0;
}

情况2:
如果当前数反转后前9位的绝对值恰好等于INT_MAX(INT_MIN)的前9位(214748364),并且该数还有剩余位没有被遍历,那么还需要判断接下来的一位是否会造成溢出:

//rev为当前反转后的结果
if ((rev == INT_MAX / 10 && pop > 7) || (rev == INT_MIN / 10 && pop < -8)) {return 0;
}

3.代码

class Solution {public:int reverse(int x) {int rev = 0;//反转结果while (x != 0) {int pop = x % 10;//取出当前最低位x /= 10;//移除当前最低位//最大值溢出if (rev > INT_MAX / 10 || (rev == INT_MAX / 10 && pop > 7)) {return 0;}//最小值溢出if (rev < INT_MIN / 10 || (rev == INT_MIN / 10 && pop < -8)) {return 0;}//rev左移一位并加入新的一位rev = rev * 10 + pop; }return rev;}
};

[模拟|数位] leetcode 7 整数反转相关推荐

  1. [模拟|数位] leetcode 9 回文数

    [模拟|数位] leetcode 9 回文数 1.题目 题目链接 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true ...

  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. LeetCode NO7. 整数反转

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

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

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

  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 ...

最新文章

  1. Facial keypoints detection Kaggle 竞赛系列
  2. java简述对象的组合_Java程序运行和对象创建过程简述
  3. 在RHEL5.4上做YUM
  4. RxJs SwitchMapTo 操作符之移花接木
  5. 【安全牛学习笔记】思路、身份认证方法、密码破解方法、字典
  6. Oracle之ROW_NUMBER() OVER函数
  7. python中msg是什么意思,使用python解析Outlook .msg文件
  8. 中国教育电脑市场趋势报告、技术动态创新及市场预测
  9. prototype中的$R函数的用法
  10. 有关计算机的未来想象作文,电脑的想象作文
  11. houdini 基础
  12. 中国网络安全企业50强
  13. asps英文_汽车术语中英文对照
  14. 关键点检测评价指标OKS
  15. 如何解决android studio找不到手机!
  16. 用fread()和fwrite()读写文件
  17. 【Linux】——库函数
  18. DynamicPDF HTML TO PDF 转换器
  19. 采用 MediaRecorder 实现录音功能
  20. power query是什么

热门文章

  1. php centos mysql_Linux+Apache+PHP+MySQL服务器环境(CentOS篇)
  2. python3编译成exe运行_python3.x的程序如何打包成exe可执行文件
  3. radius java_Java处理Radius access-challenge
  4. 最近公共祖先_LeetCode 236. 二叉树的最近公共祖先
  5. 洛谷 P1908 逆序对(树状数组+离散化)
  6. Java 实验5 T4 检验字符串是否合法
  7. iostream, istream 和 ostream的区别
  8. 关于Cohen-Sutherland算法和Liang-Barsky算法
  9. bat文件打开cmd并且运行cmd命令
  10. ubuntu 远程连接服务器以及文件传输