
【简单】7.整数反转
发布日期:2021-05-09 06:57:27
浏览次数:11
分类:博客文章
本文共 1193 字,大约阅读时间需要 3 分钟。
7.整数反转
题目:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [$$−2^{31}$$, $$2^{31} − 1$$]。请根据这个假设,如果反转后整数溢出那么就返回 0。
官方解法:
class Solution { public int reverse(int x) { int rev = 0; while (x != 0) { int pop = x % 10; x /= 10; if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0; if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0; rev = rev * 10 + pop; } return rev; }}
反转x的值:
- 重复弹出x的最后一位,并将它推到rev的后面。
- 得到的rev就是反转x的值。
//依次弹出pop值int pop =x%10;x/=10;// 依次填到rev之后int rev = 0;int temp = rev*10+pop;rev = temp;
判断溢出情况:
temp = rev*10+pop
的溢出情况
rev*10>Interger.MAX_VALUE
,时一定溢出。2.rev*10==Interger.MAX_VALUE
时,也就是说temp值的最后一位是pop,我们需要知道Integer的便界值是多少,2^31-1的最后一位为7,也就是说只要pop>7时,temp值就比Integer的最大值要大了。- 所以综上:判断正溢出的语句为:
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
同理,负边界为2^-31最后一位是-8,所以判断负溢出的条件为:if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
另外,这里如果不知道最后一位,可以通过Integer.MAX_VALUE%10
或Integer.MIN_VALUE%10
计算。
复杂度:
时间复杂度:O(log(x))空间复杂度:O(1)发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月16日 09时31分05秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
多种坐标系之间的转换 Proj.NET和DotSpatial
2019-03-06
资深人士剖析微软开源.NET事件:战略重心已经从PC转移到云端
2019-03-06
ASP.NET Web API 2.1支持Binary JSON(Bson)
2019-03-06
.NET Core系列 :4 测试
2019-03-06
积极参与开源项目,促进.NET Core生态社区发展
2019-03-06
Devops step by step
2019-03-06
c++入门之运算符重载
2019-03-06
事件总线知多少(2)
2019-03-06
ES 32 - Elasticsearch 数据建模的探索与实践
2019-03-06
Java - Java开发中的安全编码问题
2019-03-06
JMeter 中实现发送Java请求
2019-03-06
Python 利用Python操作excel表格之openyxl介绍Part1
2019-03-06
redis redis常用命令及内存分析总结(附RedisClient工具简介
2019-03-06
Jenkins Jenkins结合GIT Maven持续集成环境配置
2019-03-06
Java win7或 xp下配置JDK环境变量
2019-03-06
Loadrunner 脚本优化-事务函数简介
2019-03-06
loadrunner 脚本优化-参数化方法
2019-03-06