目录
题目
- 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
法一、直接解
def reverse_force(self, x: int) -> int:
if -10 < x < 10: #个位数直接返回
return x
str_x = str(x) #转成字符串处理
if str_x[0] != "-": #如果是正数
str_x = str_x[::-1] #直接取反
x = int(str_x)
else:#负数
str_x = str_x[:0:-1] #除开符号位置取反
x = int(str_x)
x = -x #加上负号
return x if -2147483648 < x < 2147483647 else 0#如果满足范围返回,否则返回0
法二、数学解法
- 核心三行:
temp = x % 10 #拿到最后一位,若为123,temp=3,2,1
res = res * 10 + temp# res=3,30+2=32,32*10+1=321
x = x // 10 #x=12,1
class Solution:
def reverse(self, x: int) -> int:
res = 0
sign = 1 if x >= 0 else -1
x = abs(x)
while x != 0:
temp = x % 10
if res > 214748364 or (res == 214748364 and temp > 7):#整数范围是 [-2147483648, 2147483647],所以最后一位的取值范围是 0 到 9。如果当前位数的值大于 7,那么在将其加入到结果 res 中时,结果 res 乘以 10 后的值将会超过上限 2147483647,因此会导致溢出
return 0
if res < -214748364 or (res == -214748364 and temp < -8):
return 0
res = res * 10 + temp
x = x // 10
return res * sign
标签:10,return,temp,int,反转,整数,str,res
From: https://www.cnblogs.com/lushuang55/p/17781132.html