转载:力扣:整数翻转(难点:整数溢出)

(力扣)LeetCode刷题之整数反转

8 人 赞同了该文章

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

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

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

卧槽,又是简单题,简单个毛线啊,对于我这种菜鸡来说,真的好难呀!!!

我的思路一开始就是笨办法,把数字转换成字符串,然后判断是否是正数,负数,最后转换以后看是否在[-2^31,2^31-1]范围内,但是好像不行啊,用什么来接收转换后的数字呢?环境只允许存储32位的有符号数,不能使用long64位的来接收啊????

力扣(LeetCode)官方给出的解题方式如下:

我勒个去啊,这TM的就是一道数学题啊!!!

理下思路吧:

官方给出的思想是“弹出”和“推入”

首先是弹出:

/pop operation:  //弹出
pop = x % 10; //取余运算,得到一个数字最后一位,得到数字符号和x的一致
x /= 10;  //接上步得到最后一位数字,该数字不要最后一个数字了

例如:数字3456

pop = 3456 % 10= 6

x /=10 → x = 3456/10 = 345

推入

//push operation://推入
temp = rev * 10 + pop;  //rev一开始是0
rev = temp;

例如:接上面的

temp = 6

rev = 6

重复上面的“弹出”,“推入”操作,就可以完成数字的反转

但是,问题也来了,防止溢出,所以肯定得有个条件的嘛,2^31-1的值为:2147483647,将近21亿多,当作圆周率记一下吧,要是我有这么多钱就好了,-2^31的值为:-2147483648

如果:“弹出”和“推入”得到的rev的数值>int类型的最大值/10,就不可能成功了,肯定溢出,例如:rev = 214748365,他下一次“推入”的数字不管是多少肯定比2^31-1大,

或者rev的数值=int类型的最大值/10 ,那么“弹出”的数字>7,也不行

负数的同理

总结:学渣的我能理解也不容易吧,还好数学思维好,┭┮﹏┭┮,只能慢慢来了,其他的方法以后再补充吧,感觉做这种题好烧脑啊......

发布于 2019-02-25
力扣(LeetCode)
赞同 8​ 3 条评论
分享
喜欢 ​ 收藏
赞同 8
分享
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值