7.整数反转---python3

题目:

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer

方法1:

没做过题的小白做法:

#python3
class Solution:
    def reverse(self, x: int) -> int:
        arr= set()
        def f(s:str):
            if s.find('0')==0:
                if len(s)==1:
                    return s
                for i in range(1,10):
                    if s.find(str(i))!=-1:
                        arr.add(s.find(str(i)))
                    else:
                        continue
                return s[list(arr)[0]:len(s)]
            else:
                return s
        if x<=0:
            x=-1*x
            s=str(x)
            s = s[::-1]
            f(s)
            a=int(s)
            a=-1*a
            if a<-2147483648:
                return 0
            else:
                return a
        else:
            s=str(x)
            s=s[::-1]
            f(s)
            if int(s)>2147483647:
                return 0
            else:
                return int(s)

首先判断x是否小于零,如果小于0则先将其转化为正数,然后再转化为字符串类型,并将字符串s反转后将字符串作为参数传进reverse函数中 reverse函数判断字符串的首部是否为0,如果是0,则需要将字符串从第一个不为0的数开始一直到字符串尾部将其返回,方法是创建一个用于存放下标的数组,在s中将其找到所有不为0的下标存入数组,然后找到下标数组的最小值就是第一个不为零的正数,因为set函数会自动排序,故取出第一个元素即为最小下标。
请添加图片描述
例如5302500反转后为0052035,依次存入的下标为3 5 2 自动排序后为2 3 5即返回从第三个元素开始到字符串末尾的字符串s:52035

s=Solution()
print(s.reverse(5302500))
输出:52035

如果x为负数 则从s经过reverse函数后结果要变为负数并与题目要求的-2^31比较大小。

方法2:

看了题解后才发现用数学方法就不到10行代码能做出来:

#python3
def reverse2(self, x: int) -> int:
    a = abs(x)
    n = 0
    while a != 0:
        n = n * 10 + a % 10
        a = a // 10
    if n > 2147483647 or n > 2147483648:
        return 0
    return n if x > 0 else -n

这个做法是先取绝对值,进行取模、取整、相加运算就能轻松做出来,也不需要用数组来耗费大量空间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值