7. 整数反转

发布时间 2023-10-23 10:06:33作者: Frommoon

题目

  • 给你一个 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