题目
https://leetcode-cn.com/problems/reverse-integer/
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
关键词
- 数字反转
- 数字反转后的结果的范围 [−2^31, 2^31 − 1] ,就返回 0
解法一
常规: 将数字变为字符串处理
class Solution:
def reverse(self, x: int) -> int:
x1 = abs(x)
x1 = str(x1)[::-1]
x1 = int(x1) if x >= 0 else -int(x1)
if x1 > 2 ** 31 - 1 or x1 < -2 ** 31:
return 0
return x1
解法二
- while 循环处理数字
class Solution:
def reverse(self, x: int) -> int:
x1 = abs(x)
res = 0
while x1 > 0:
a = x1 % 10
x1 = x1 // 10
res = res * 10 + a
if x < 0:
res = -res
print(res)
if res > 2 ** 31 - 1 or res < -2 ** 31:
return 0
return res
- 用 while 循环基本也可以用递归
class Solution:
def reverse(self, x: int) -> int:
x1 = abs(x)
def a(x1, res=0):
if x1 == 0:
return res
c = x1 % 10
b = x1 // 10
res = res * 10 + c
return a(b, res)
x1 = a(x1)
if x < 0:
x1 = -x1
if x1 > 2 ** 31 - 1 or x1 < -2 ** 31:
return 0
return x1