题目:

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。 思路:

根据题目要求,需要将给定的有符号整数 x 的数字部分反转。如果反转后的整数超过 32 位,要返回 0。

一个简单的方法是先将有符号整数转换为字符串,然后对字符串进行反转,再将结果转换回整数。但是,这种方法可能会超出范围限制。因此,我们需要一种更加可靠的方法来解决这个问题。

首先,我们可以使用取模和除法运算来提取整数的每个数字,然后将它们添加到结果中。在添加每个数字之前,都要检查是否已经超出了范围限制。

具体地说,我们可以循环执行以下操作:将 x 取模 10 得到个位数字,然后将 x 除以 10 以去掉个位数字。在每次迭代中,我们将当前结果乘以 10 并加上当前的个位数字。在计算过程中,我们还需要注意检查是否超出了范围限制。如果超出了范围,则应立即停止计算并返回 0。

下面是使用 Python 编写的代码实现:

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        INT_MAX = 2**31-1 # 最大值
        INT_MIN = -2**31 # 最小值
        rev = 0
        sign = -1 if x < 0 else 1 # 判断正负
        x = abs(x) # 取绝对值
        while x != 0:
            pop = x % 10
            x = x // 10
            if sign == 1 and (rev > INT_MAX//10 or (rev == INT_MAX//10 and pop > 7)):
                return 0
            if sign == -1 and (rev > INT_MAX//10 or (rev == INT_MAX//10 and pop > 8)):
                return 0
            rev = rev * 10 + pop
        return sign * rev

在上面的代码实现中,我们首先定义了两个常量来表示有符号整数的范围。然后,我们使用一个变量 sign 来确定给定整数的正负性。接下来,我们将 x 转换为其绝对值,以便于迭代计算每个数字。

在循环过程中,我们首先使用取模和除法运算提取当前数字,并将 x 更新为去掉个位数字后的结果。然后,我们使用一系列条件检查来验证是否已经超出了范围限制。如果超出了范围,则应立即返回 0。否则,我们将当前的数字添加到结果中,并继续迭代计算下一个数字。