力扣-7. 整数反转-中等

这篇博客介绍了如何在Python中反转一个32位有符号整数,并确保结果在合法范围内。提供了三种不同的解决方案,包括常规迭代、转换为绝对值处理和转换为字符串再反转。每种方法的时间复杂度都是O(log|x|),空间复杂度为O(1)。博客还讨论了在处理负数取模和负数取整时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7. 整数反转

题目介绍

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321
示例 2:

输入:x = -123
输出:-321
示例 3:

输入:x = 120
输出:21

思路梳理

在这里插入图片描述
负数取模
在这里插入图片描述

代码

题解1
class Solution:
    def reverse(self, x: int) -> int:
        # 设置int的数据范围
        int_max ,int_min = 2**31-1,-2**31-1
        rev = 0
        while x!=0:
            # 判断是否超过32位
            if rev < int_min//10+1 or rev > int_max //10:
                return 0
            digit = x%10 # 取出最后一位
            # 负数取模不一样和整数取模,这里需要判断
            if x<0 and digit>0:
                digit -= 10
            
            # 同理,python负数取整会向下取整,这样先去除个位数
            x = (x-digit) // 10
            rev = rev*10+digit
        return rev
题解2

直接转换为绝对值,好处就是不用判断整数还是负数

class Solution:
    def reverse(self, x: int) -> int:
		y, res = abs(x), 0
        # 则其数值范围为 [−2^31,  2^31 − 1]
        # 转为绝对值的最大范围
        boundry = (1<<31) -1 if x>0 else 1<<31
        while y != 0:
            res = res*10 +y%10
            if res > boundry :
                return 0
            y //=10
        return res if x >0 else -res

题解3

转换为字符串

class Solution:
    def reverse(self, x: int) -> int:
        x1 = -1 if x < 0 else 1
        x = str(abs(x))
        x = int(x[::-1])
        x = x * x1

        return x if -2**31<x<2**31-1 else 0

总结

复杂度分析

时间复杂度:O(\log |x|)O(log∣x∣)。翻转的次数即 xx 十进制的位数。

空间复杂度:O(1)O(1)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值