zoukankan      html  css  js  c++  java
  • leetcode第7题整数反转

    题目描述

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    示例1:

    输入: 123
    输出: 321

    示例2:

    输入: -123
    输出: -321

    示例3:

    输入: 120
    输出: 21

    注意:
    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    解题思路(python)

    2^31=2147483648
    在看到这个题以后,最容易想到的办法就是使用字符串反转。但是需要进行各种情况的判断,比如大于0小于0;由于python整型没有规定范围,还需要判断2147483648。
    yh师兄给我提供了另一种思路,利用reduce函数进行迭代。我当时没写出来,师兄给了完整的代码之后,我发现这种办法很精巧。我把他的代码也放到这里,感谢他的帮助。

    #思路一:字符串
    class Solution:
        def reverse(self, x):
            """x:int"""
            if (x>2147483647 or x<-2147483648):
                return 0
            if -10 < x < 10:
                return x
            if x>0:           
                x = str(x)
                x = int(str(int(x[::-1])))
                if (x>2147483647 or x<-2147483648):
                    return 0
                else:
                    return x
            elif x<0:
                x = str(abs(x))
                x=-int(str(int(x[::-1])))
                if (x>2147483647 or x<-2147483648):
                    return 0
                else:
                    return x
    

    执行用时84ms,内存消耗13.4MB

    #思路二:reduce函数对字符串迭代处理
    from functools import reduce
    class Solution:
        def reverse(self, x):
            """x:int"""
            flag = False
            if x > 0:
                flag = True
            else:
                x = -x
            res = reduce(lambda a,b:b+a, [i for i in str(x)])
            res = int(res) if flag else -int(res)
            if res>2147483647 or res<-2147483648:
                return 0
            return res
    

    执行用时88ms,内存消耗13.2MB

    reduce函数

    Python reduce() 函数,菜鸟教程

  • 相关阅读:
    骥遇伯乐,关键的一点是人与事的匹配
    好习惯改变一生
    工作中如何面对挫折 [转帖]
    教育心理学领域有一句经典名言
    接触之,熟悉之,打破之
    成年人的35个好习惯(收藏)
    如何树立威信
    人际关系的55个绝招
    人际交往常见几种心理障碍 -实用
    人生成长必须知道的20则故事!
  • 原文地址:https://www.cnblogs.com/yihe/p/10717331.html
Copyright © 2011-2022 走看看