给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。
输入:x = 123 输出:321
输入:x = -123 输出:-321
输入:x = 120 输出:21
输入:x = 0 输出:0
代码定义了一个名为Solution
的类,其中包含了一个reverse
方法。下面对代码进行详细的分析说明:
Solution
类,继承自object
。
reverse
方法是Solution
类的一个成员方法,接受一个整数作为输入参数x
,并返回一个整数作为结果。
if
语句判断输入整数x
是否小于0,确定其正负性,并保存符号。
x
小于0,则将符号设置为-1,并取x
的绝对值(使用abs()
函数);否则,将符号设置为1。
x
转换为字符串形式,使用str()
函数将整数转换为字符串。
num_str
进行切片操作[::-1]
,实现字符串翻转。这里通过反向迭代取字符串的每一个字符,从而达到翻转的效果。
num_str
转换回整数形式,并乘以之前保存的符号,得到反转后的整数reversed_num
。
reversed_num
是否超出范围。如果超出范围,则返回0;否则,返回反转后的整数reversed_num
作为结果。
代码的核心思想是将整数转换为字符串,然后对字符串进行翻转操作,最后再将翻转后的字符串转换回整数。通过判断符号和处理边界条件,确保返回结果在规定范围内。
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
# 判断输入整数为负数,并保存符号
if x < 0:
sign = -1
x = abs(x) # 取 x 的绝对值
else:
sign = 1
# 将整数转换为字符串,并去除符号部分(如果有)
num_str = str(x) # 将整数转换为字符串
num_str = num_str[::-1] # 翻转字符串
# 将字符串转换为整数,并加上之前保存的符号
reversed_num = int(num_str) * sign
# 判断结果是否超出范围
if reversed_num < -2**31 or reversed_num > 2**31 - 1:
return 0
return reversed_num
首先,在 reverse
方法中,我们需要注意处理负数的情况。具体步骤如下:
x
的值来确定其正负性,并保存符号。 x
小于 0,则说明是一个负数,需要将符号设置为 -1,并取 x
的绝对值;否则,符号设置为 1。if x < 0:
sign = -1
x = abs(x)
else:
sign = 1
接下来,我们将整数 x
转换为字符串,并通过字符串切片操作 [:: -1]
对字符串进行翻转。这一步是实现整数反转的核心步骤。
x
转换为字符串,并通过字符串切片操作 [:: -1]
对字符串进行翻转。num_str = str(x)
num_str = num_str[::-1] # 翻转字符串
然后,我们将翻转后的字符串 num_str
转换为整数,并乘以之前保存的符号 sign
,得到反转后的整数 reversed_num
。
num_str
转换为整数,并乘以之前保存的符号 sign
。reversed_num = int(num_str) * sign
最后,我们需要判断反转后的整数 reversed_num
是否超出范围。题目要求结果在 32 位有符号整数的表示范围内,即 -2^31
到 2^31 - 1
。
reversed_num
是否超出范围,如果超出范围则返回 0,否则返回反转后的整数 reversed_num
。if reversed_num < -2 ** 31 or reversed_num > 2 ** 31 - 1:
return 0
return reversed_num
solution = Solution()
x = 123
x1 = -123
x3 = 120
x4 = 0
print(solution.reverse(x))
print(solution.reverse(x1))
print(solution.reverse(x3))
print(solution.reverse(x4))