题目:
给你一个 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。否则,我们将当前的数字添加到结果中,并继续迭代计算下一个数字。