题目

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 7. 整数反转 - 图1。请根据这个假设,如果反转后整数溢出那么就返回 0

示例1

  1. 输入:x = 123
  2. 输出:321

示例2

输入:x = 120
输出:21

示例3

输入: 1534236469
输出: 0

实现

本题其实就是 pop和push数字+溢出检查

思路1

暴力转成字符串再直接翻转,并在输出前最后判断一下是否溢出。

 def reverse(self, x):
    if -10 < x < 10:
        return x
    str_x = str(x)
    if str_x[0] != "-":
        str_x = str_x[::-1]
        x = int(str_x)
    else:
        str_x = str_x[:0:-1]
        x = int(str_x)
        x = -x
    return x if -2147483648 < x < 2147483647 else 0

思路2

在向反转数字串添加数字时判断是否溢出。

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        result = 0
        y = abs(x)
        boundary = (1<<31)-1 if x>0 else 1<<31  # 构建边界条件
        while y!=0:
            pop = y % 10
            result = result*10 + pop
            if result>boundary:   # 每次添加一位就检查一次
                return 0
            y //= 10
        return result if x>0 else -result