题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解法一:
看到这题,主要思路分以下几步:(1)将整数转换为字符 (2)再转换成list数组,(3)将list数组反转,(4)list数组转换为字符串,(5)字符串转换为整数,这个思路的整个流程主要考验对数据类型转换以及内建函数的使用,另外有两点需要注意,(1)负数的处理 (2)是反转后整数不能溢出
代码如下:
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if x > 0:
y = list(str(x))
y.reverse()
y = int(''.join(y))
if y > (2 ** 31-1):
return 0
else:
return y
elif x <= 0:
y = list(str(x))
tmp = y.pop(0)
y.reverse()
y = ''.join(y)
y = int(tmp + y)
if y < -2 ** 31:
return 0
else:
return y
学习了一下题解的答案,将自己的代码又优化了一遍:
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
y = list(str(x))
tmp = 0
if y[0] == '-':
tmp = y.pop(0)
y.reverse()
y = ''.join(y)
if tmp == '-':
return int(tmp + y) if int(tmp + y) > -2 ** 31 else 0
else:
return int(y) if int(y) < 2 ** 31 - 1 else 0
奥利给!
解法二
使用数学方法取模来计算整数反转,同样要注意的是上面提到的两个注意事项
代码如下
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
tmp = 0
flag = True if x >= 0 else False
x = abs(x)
while (x != 0):
tmp = tmp * 10 + x % 10
x /= 10
if flag:
return tmp if tmp < 2 ** 31 - 1 else 0
else:
return -tmp if -tmp > -2 ** 31 else 0
奥利给!