2018-11-10 反转整数

2018-11-10  本文已影响0人  Kong_Mt

反转整数

给定一个 32 位有符号整数,将整数中的数字进行反转。
示例一

  输入:123
  输出:321

示例二

输入:-123
输入:-321

示例三

输入:120
输出:21

注意
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。`

思路一

通过过算术来实现反转,这是网上普遍的做法。循环遍历参数的同时,使用新的变量记录每一次输出的数字,然后返回。

--参考原文--

class Solution:
    def reverse(self, x):
        R = 0   #返回值
        flag = 1 #标记输入值的正负
        if x<0:
            x = abs(x)
            flag = -1 #输入是负数
        while x != 0:
            R = R*10+x%10
            x = x//10
        if -2147483647<R< 2147483648:#判断是否越界
            return R*flag
        else:
            return 0

思路二

我看到网上很多思路都是通过数学的方法来解决反转的问题,不过本人数学向来不好,就想了个字符串反转的方法(不通过计算直接将字符串反转)

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        flag = -1 if x < 0  else 1
        x = reversed(list(str(abs(x))))
        R = int(''.join(i for i in x))
        if not -2147483647 < R < 2147483648:
            return 0
        return R*flag

这样子写的方法有个好处就是reversed生成的是一个生成器不是list,也不需要遍历之后再进行运算,节省空间的同时减少计算。

思路三

使用切片,将int转换成str之后使用步进为-1的切片获得结果。
参考原文

class Solution:
    def reverse(self, x):
        flag = 1
        if x < 0:
            flag = -1
            x = -x
        R = str(x)[::-1]
        R = int(R)
        if R> 2147483647 or R < -2147483648:
            R = 0
        return R*flag

最终运行的结果是思路二最快:


image.png

....有点无语的,一开始测试是快于94.5%的,不知道为什么又变慢了!!!

上一篇下一篇

猜你喜欢

热点阅读