题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例
输入: 123
输出: 321
输入: -123
输出: -321
要求
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,231−1][−2^{31}, 2^{31} − 1][−231,231−1] 。请根据这个假设,如果反转后整数溢出那么就返回 0。
解题思路
我们观察题目的要求和给出的示例,发现我们所要做的就是将输入的数字进行倒序输出,并保持其符号不变。对于超出数值范围[−231,231−1][−2^{31}, 2^{31} − 1][−231,231−1] 的内容,直接返回0。
对于这个问题,我们可以使用两种解法,一种是将其就看作是数字的反转,我们只要逐步进行取余操作,得到各个位上的数字即可。
另外一种是可以看作为字符串的反转,我们只需要反转这个字符串就可以完成整数的反转操作,但需注意整数为负数的问题。
以数字进行反转的代码如下,只需逐步取余
class Solution:
def reverse(self, x: int) -> int:
num = x if x>0 else -x
n = 0
while num:
n = n*10 + num%10
num = num//10
n = n if x>0 else -n
if n > 2147483647 or n < -2147483648:
return 0
return n
# 48ms
以字符串的反转来解决这个问题的代码如下,注意‘-’的存在
class Solution:
def reverse(self, x: int) -> int:
s = str(x)
if x > 0:
s = s[::-1]
else:
s = s[0] + s[1:][::-1]
x = int(s)
if x > 2147483647 or x < -2147483648:
return 0
return x
# 36ms
人生不易 且行且珍惜