LeeCode——整数反转

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

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

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

可能是刚上手LeeCode,我这种小白一直以为提交完整代码,之后发现不太对劲,便根据参考答案调试。

刚开始我是这样写的

这里并没有注意溢出的情况,自然而然的发生了错误。

我为什么不判断溢出呢,因为我根本不会写啊!!!T^T 

然后我想了想,加了判断溢出的条件 INT_MAX, INT_MIN,int的最大值和最小值。

最初执行是正确的。

但最后还是溢出了,错误和之前是一样的。 我实在忍无可忍,去看了答案。。。。。。。。。

。。。

。。

后续就是,我并没有看懂答案的溢出条件说明了什么,怎么来的我也不知道,所以我果然是个菜鸟。

。。。

。。

刚刚明白了这个溢出条件,

  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 * 10 + pop; 这一句之前没有判断,那么在rev*10之前rev就已经发生溢出,因此当rev大于(小于)最大值(最小值)时溢出,并且当它的十位及高位未溢出时,个位在判断溢出后才加上,那么个位有可能发生溢出,Int的

2^31-1=2147483647 ,INT_MAX
-2^31=-2147483648 , INT_MIN

它的个位是7 和 -8,因此当加上的pop数大于7或者小于-8的时候,便会产生溢出,于是添加这个条件后,便成功通过。

但是它用时还是挺长的。。。内存消耗也长。。。。这就不是我一个小菜鸟现在能解决的问题了。。

猜你喜欢

转载自blog.csdn.net/Yuan_xln/article/details/87990301