leedcode:7. 整数反转(假设环境不允许存储 64 位整数)

我们先给出题目:
在这里插入图片描述

由于题目中注明了:假设环境不允许存储 64 位整数(有符号或无符号),但是笔者在评论区看到有很多的方法是采用其他语言(比如C语言)的截断功能做的,或者是对于python3这种对于int类型没有长度限制的直接使用比较功能,我觉得对于题目来说是不太严谨的做法,下面提供一个我python3的做法,供大家批评指正。

这里我们需要考虑两个要点:
1.第一个是反转过来之后这个数仍然最大不会超过2^31所能代表的十进制位数,也就是10位
2.第二个就是反转之后的数前面可能会有若干个0,那么我们需要将其去掉,然后把做完上述处理之后的字符串和2^31对应的十进制字符串作比较

下面是整体的代码:

class Solution:
    def reverse(self, x: int) -> int:
        # 先处理为0的情况,我们把它拿出来单独讨论
        if x == 0:
            return 0
            
        # 先将数字转换成字符串
        str1 = str(x)
        number1 = "2147483647"  # 代表的是2^31 - 1
        number2 = "2147483648"  # 代表的是2^31
        
		# 对应x为负数的情况
        if x < 0:
            # 先使用切片的方式把数字的部分颠倒过来
            str1 = str1[1:][::-1]
            # 我们把前面所有的0都给切除掉了
            i = 0
            while str1[i] == '0':
                i += 1
            str1 = str1[i:]
            # 由于之前的分析str1的长度只可能是10位或者更少的位数
            # 所以当是10位的时候我们需要和下界number1做比较,小于10位就不用比较了
            if len(str1) < 10:
                return int("-" + str1)
            else:
                for i in range(10):
                    if int(str1[i]) - int(number2[i]) < 0:
                        return int("-" + str1)
                    elif int(str1[i]) - int(number2[i]) > 0:
                        return 0
                    else:
                        continue
        # 对应x为正数的情况(大致过程和上面一致,只有细微的差别,就不一行行注释了)
        else:
            str1 = str1[::-1]
            i = 0
            while str1[i] == '0':
                i += 1
            str1 = str1[i:]
            if len(str1) < 10:
                return int(str1)
            else:
                for i in range(10):
                    if int(str1[i]) - int(number2[i]) < 0:
                        return int(str1)
                    elif int(str1[i]) - int(number2[i]) > 0:
                        return 0
                    else:
                        continue
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值