7. 整数反转
给你一个 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
class Solution:
def reverse(self, x: int) -> int:
x_abs = abs(x)
n_out = 0
while x_abs != 0:
n_out = n_out * 10 + x_abs % 10
x_abs = x_abs //10
if n_out < -2 ** 31 or n_out > 2 ** 31 -1:
return 0
if x<0:
n_out = - n_out
return n_out
- 整数的反转,拿123为例,反转后321,也就是3x100+2x10+1,整数取到每一位的数字方法可以是拿这个整数除以10后的余数,记住要每次更新这个数字x,也就是x = x//10。第一次:123%10=3,第二次:12%10 =2,第三次:1%1 =0。遇到零了循环停止,也就是我们遍历完每一位了。
- 得到的每一位数字我们需要把它们组合为一个整数,可以看成
第一次:0 * 10 + 3 = 3
第二次:3 * 10 + 2 = 32
第三次:32 * 10 + 1 = 321
- 这里还分了正整数和负整数, trick在于用整数的绝对值做以上的操作,再根据参数x的正负判断我们应该输出正数还是负数。
Note:
-123 / 10 = -13 ······7,余数一定是一个非负数。所以负数的情况要分开,或者先按正数操作再加符号。