题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)链接
题解
特意选择简单的题先做的,解法一涉及到整型、字符串、数组直接的转换,解法二需要注意的是python中负数取余和正数取余的方式不一样。
解法一:
执行用时:32 ms, 在所有 Python3 提交击败了97.85%的用户;
内存消耗:14.7 MB, 在所有 Python3 提中击败了5.03%的用户。
class Solution:
def reverse(self, x: int) -> int:
str_x = str(x) # 整型转换为字符串
list_x = list(str_x) # 字符串转换为数组
if x < 0: # 负数情况
list_x.remove(list_x[0])
rlist_x = list_x[::-1] # 数组反转
s = ''.join(rlist_x) # 数组转换为字符串
return -int(s) if int(s) < 2**31 else 0 # 字符串转换为整型
else:
rlist_x = list_x[::-1] # 数组反转
s = ''.join(rlist_x) # 数组转换为字符串
return int(s) if int(s) < 2**31 else 0 # 字符串转换为整型
解法二:
执行用时:40 ms, 在所有 Python3 提交中击败了79.61%的用户;
内存消耗:14.7 MB, 在所有 Python3 提交中击败了5.03%的用户。
class Solution:
def reverse(self, x: int) -> int:
s = 0
if x < 0:
x = - x
while x is not 0:
s = s * 10 + x % 10
x = x // 10
return -s if s < 2**31 else 0
else:
while x is not 0:
s = s * 10 + x % 10
x = x // 10
return s if s < 2**31 else 0