• LeetCode 7整数反转


    这道题真的是折射出我的python基础不太扎实

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
    示例 1:
    输入: 123
    输出: 321
     示例 2:
    输入: -123
    输出: -321
    示例 3:
    输入: 120
    输出: 21
    注意:
    假设我们的环境只能存储得下 32 位的有符号整数,
    则其数值范围为 [231,  2311]。请根据这个假设,如果反转后整数溢出那么就返回 0

    一开始看到这道题,我第一个想法就是把整数变成字符串类型,然后列表逆序,然后找个办法计算出结尾0的个数,这不是很简单嘛。然后我花了十分钟写了下面代码(列表切片有一点忘了)

    class Solution(object):
        def reverse(self, x):
            """
            :type x: int
            :rtype: int
            """
            y = 10
            while (x//y == x/y):
                y *= 10
            y = int(y/10)
            y = len(list(str(y))) - 1
            
            if x >= 0:
                x = list(str(x))
                x = x[::-1]
                x = x[y:]
                return int("".join(x))
            else:
                x = list(str(x))
                x.pop(0)
                x = x[::-1]
                x = x[y:]
                return -int("".join(x))
    

    我"大吃一鲸",直接超时,一直在我映像里切片啊变成数组啊,合并数组为字符串啊什么的都是非常快的,这也以后让我有了堤防,以后写项目尽量优化性能,然后我心态就有点爆炸,没有继续想下去,取留言看了下题解,发现还是很简单的(呜呜呜)。解题方法类似HDOJ上的一道水题,水仙花数,就是使用取余和整除依次分离各个位上的数,实现反转。
    最后放代码:

    #战胜 93.45 % 的 python 提交记录
    #执行时间36 ms
    class Solution(object):
        def reverse(self, x):
            """
            :type x: int
            :rtype: int
            """
            b = 0
            if x < 0:
                b, x = 1, abs(x)
            mod, res = 0, 0
            while x:
                x, mod = x // 10, x % 10
                res = res * 10 + mod
                if res > 2147483648:
                    return 0
            if b == 1:
                res = -res
            return res
    
    
  • 相关阅读:
    (转)matlab 字符串处理函数
    (原)不明白JNI指针调用顺序
    (转)几种平均数的关系:
    (原+转)继承与虚函数
    (原)给定输入,输出全排列
    (转)发现两个有用的C函数_alloca()、_msize()
    (原)android的JNI中使用C++的类
    (原+转)C++中的const修饰符
    (转)C/C++中static关键字
    JAVA IO 对象流
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072643.html
Copyright © 2020-2023  润新知