LeetCode练习7:Reverse Integer

题目

Given a 32-bit signed integer, reverse digits of an integer.

Example:

Input: 123,Output: 321
Input: -123,Output: -321
Input: 120,Output: 21

分析

题目中的输入为:一个32位的有符号整数 x x .
输出为:倒序的整数x^

32位有符号整数的范围是: 2312311 − 2 31 ∼ 2 31 − 1 ,而由于不同平台(32位和64位系统)之间的差异,其整型范围不同。
我的系统为64位系统,配置的python3也是64位,因此最大范围是 2632631 − 2 63 ∼ 2 63 − 1

解答

由于python中的取余操作是商向负无穷方向取整,和C语言中的向0方向取整不同。举例来说,对于 m,d m , d 两个整数:

q=m/dr=m%d q = m / d r = m % d
其满足的条件为 m=q×d+r m = q × d + r ,因此不限制 r r 的正负时,r其实有两种选择, 比如:
7=1×10+(3)7=0×10+7 7 = 1 × 10 + ( − 3 ) 7 = 0 × 10 + 7
但现实生活中,我们常默认余数是正数,因此选择余数 r=7 r = 7
而当 m,d m , d 中有负数时,不同的编程语言采用了不同的方式进行处理,考虑 m=7 m = − 7 时,
7=1×10+(3)(1) (1) − 7 = − 1 × 10 + ( 3 )
7=0×10+(7)(2) (2) 7 = 0 × 10 + ( − 7 )
(1) ( 1 ) 中的商为-1,而 (2) ( 2 ) 式中的商为0,前者被称为商向负无穷方向取整,而后者则为商向0方向取整。为了简便起见,我们首先判断输入的 x x 是否为负数。代码如下:

class Solution:
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        remainder = 0
        reversed_num = 0
        negative_flag = False
        maxInt = 2**31 - 1

        if x < 0:
            negative_flag = True
            x = -x

        while x > 0:
            remainder = x % 10
            reversed_num = reversed_num * 10 + remainder

            if reversed_num > maxInt:
                return 0

            x = int(x/10)

        if negative_flag is True:
            reversed_num = -reversed_num

        return reversed_num 

当发生溢出时,即倒序的整数大于2311时,则返回0,最后判断是否添加负数的标记。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值