整数反转
题目:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
题解:
1.符号位处理(将溢出范围分为两部分[-2^31,0)和(0,2^31-1])
2.字符反转并处理首位‘0’
3.溢出判断并处理
网友的代码(执行用时:80ms,内存消耗:13MB):
def reverse(x):
try:
#溢出判断
if -2**31 <= x < 0:
x = str(x)[1:]
#去除第一位的‘0’
x = x[::-1].lstrip('0')
if int(x) > 2**31:
#如果反转后溢出,则返回0
return 0
else:
return int('-' + x)
elif x == 0:
return 0
elif x < 2**31:
x = str(x)[::-1].lstrip('0')
if int(x) >= 2**31:
return 0
else:
return int(x)
except:
#处理输入值过大溢出的问题
return 0
自己的代码(执行时间:52ms,内存消耗:13.2MB):
class Solution:
def reverse(self, x: int) -> int:
if x<0:
x=abs(x)
x = list(str(x))
result = "".join(x[::-1])
if int(result)<2**31:
return int('-'+result)
else:
return 0
elif x>0:
x = list(str(x))
result = "".join(x[::-1])
if int(result)<2**31-1:
return int(result)
else:
return 0
elif x==0:
return 0