题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 。请根据这个假设,如果反转后整数溢出那么就返回 0
示例1
输入:x = 123输出:321
示例2
输入:x = 120
输出:21
示例3
输入: 1534236469
输出: 0
实现
思路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
