【LeetCode】#7 Reverse Integer

【Question】

  • Reverse digits of an integer.

  • Example:

x = 123, return 321
x = -123, return -321


【My Solution】


class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        neg = 1
        if x < 0:
            neg = -1
        if x == 0:
            return 0
        x = abs(x)
        r = 0
        while x > 0:
            r *= 10
            r += x % 10
            x = x // 10
        ans = r * neg
        if ans > (1<<31)-1 or ans < -(1<<31):
            return 0
        return ans
  • 分析
    这题看似简单,其实挖坑很多。需要考虑到以下几点:
  1. 末尾是0的整数翻转后要舍弃0,如10→1,120→21。因此我使用最常规的“对10取余,对10地板除”的方式来翻转整数,此处不宜采用强制类型转换的方式。
  2. 考虑正负两种情况。设一个符号的flag进行调整。
  3. Overflow的问题,不管是翻转前还是翻转后。如果是翻转前就溢出,就要考虑整型值的范围问题,由于python是动态语言,处理变量类型比较灵活,整型值为64位的范围,远远大于题设的32位。再考虑翻转后溢出的情况,利用移位运算求出范围,翻转之后再进行判断。
posted @ 2016-12-23 00:30  涉风  阅读(134)  评论(0编辑  收藏  举报