[模拟|数位] leetcode 7 整数反转
[模拟|数位] 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 整数反转相关推荐
- [模拟|数位] leetcode 9 回文数
[模拟|数位] leetcode 9 回文数 1.题目 题目链接 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true ...
- 【LeetCode】整数反转
package leetcode.editor.cn;//给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. // // 示例 1: // // 输入: 123 //输出: 32 ...
- 53 -leetcode 7. 整数反转
//看看人家 写的多简单 INT_MIN INT_MAX 2^31 -1 -2^31 7. 整数反转 class Solution {public:int reverse(int x) {int fh ...
- LeetCode NO7. 整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0. 假设环境不允许存储 64 ...
- php 反转一个整数,LeetCode PHP 整数反转
友情提示:此篇文章大约需要阅读 2分钟16秒,不足之处请多指教,感谢你的阅读. 题目 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 32 ...
- LeetCode 7. 整数反转 Reverse Integer 官网答案的条件判定的一点思考
关于solution中的公式不知道是否清楚,在刚开始看的时候认为条件之一应当是rev<(Integer.min-pop)/10这个条件,因为rev*10+pop>Integer.min时才 ...
- C++ leetcode 7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
一.思路 转化成string, 有负号先去掉负号,然后从string的尾部开始遍历,每一个字符放到第一个另一个字符串中去. int reverse(int x) {if (x == 0)return ...
- leetcode 7整数反转和leetcode 9回文数
关键代码片 while(x>reverseN){reverseN = reverseN * 10 + x%10;x = x/10;} while (x != 0) {int pop = x % ...
- LeetCode 7 整数反转
解决方案 class Solution {public int reverse(int x) {String str = String.valueOf(x);String s = "&quo ...
最新文章
- Facial keypoints detection Kaggle 竞赛系列
- java简述对象的组合_Java程序运行和对象创建过程简述
- 在RHEL5.4上做YUM
- RxJs SwitchMapTo 操作符之移花接木
- 【安全牛学习笔记】思路、身份认证方法、密码破解方法、字典
- Oracle之ROW_NUMBER() OVER函数
- python中msg是什么意思,使用python解析Outlook .msg文件
- 中国教育电脑市场趋势报告、技术动态创新及市场预测
- prototype中的$R函数的用法
- 有关计算机的未来想象作文,电脑的想象作文
- houdini 基础
- 中国网络安全企业50强
- asps英文_汽车术语中英文对照
- 关键点检测评价指标OKS
- 如何解决android studio找不到手机!
- 用fread()和fwrite()读写文件
- 【Linux】——库函数
- DynamicPDF HTML TO PDF 转换器
- 采用 MediaRecorder 实现录音功能
- power query是什么
热门文章
- php centos mysql_Linux+Apache+PHP+MySQL服务器环境(CentOS篇)
- python3编译成exe运行_python3.x的程序如何打包成exe可执行文件
- radius java_Java处理Radius access-challenge
- 最近公共祖先_LeetCode 236. 二叉树的最近公共祖先
- 洛谷 P1908 逆序对(树状数组+离散化)
- Java 实验5 T4 检验字符串是否合法
- iostream, istream 和 ostream的区别
- 关于Cohen-Sutherland算法和Liang-Barsky算法
- bat文件打开cmd并且运行cmd命令
- ubuntu 远程连接服务器以及文件传输