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

原文地址:https://www.cnblogs.com/yfc0818/p/11072643.html