7. 整数反转

题目

  • 给你一个 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
posted @   Frommoon  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示