每天学python-整数反转

题目:

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。
思路:

根据题目要求,需要将给定的有符号整数 x 的数字部分反转。如果反转后的整数超过 32 位,要返回 0。

一个简单的方法是先将有符号整数转换为字符串,然后对字符串进行反转,再将结果转换回整数。但是,这种方法可能会超出范围限制。因此,我们需要一种更加可靠的方法来解决这个问题。

首先,我们可以使用取模和除法运算来提取整数的每个数字,然后将它们添加到结果中。在添加每个数字之前,都要检查是否已经超出了范围限制。

具体地说,我们可以循环执行以下操作:将 x 取模 10 得到个位数字,然后将 x 除以 10 以去掉个位数字。在每次迭代中,我们将当前结果乘以 10 并加上当前的个位数字。在计算过程中,我们还需要注意检查是否超出了范围限制。如果超出了范围,则应立即停止计算并返回 0。

下面是使用 Python 编写的代码实现:

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        INT_MAX = 2**31-1 # 最大值
        INT_MIN = -2**31 # 最小值
        rev = 0
        sign = -1 if x < 0 else 1 # 判断正负
        x = abs(x) # 取绝对值
        while x != 0:
            pop = x % 10
            x = x // 10
            if sign == 1 and (rev > INT_MAX//10 or (rev == INT_MAX//10 and pop > 7)):
                return 0
            if sign == -1 and (rev > INT_MAX//10 or (rev == INT_MAX//10 and pop > 8)):
                return 0
            rev = rev * 10 + pop
        return sign * rev

在上面的代码实现中,我们首先定义了两个常量来表示有符号整数的范围。然后,我们使用一个变量 sign 来确定给定整数的正负性。接下来,我们将 x 转换为其绝对值,以便于迭代计算每个数字。

在循环过程中,我们首先使用取模和除法运算提取当前数字,并将 x 更新为去掉个位数字后的结果。然后,我们使用一系列条件检查来验证是否已经超出了范围限制。如果超出了范围,则应立即返回 0。否则,我们将当前的数字添加到结果中,并继续迭代计算下一个数字。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是萧萧吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值