美文网首页
2018-11-10 反转整数

2018-11-10 反转整数

作者: Kong_Mt | 来源:发表于2018-11-10 14:32 被阅读0次

    反转整数

    给定一个 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%的,不知道为什么又变慢了!!!

    相关文章

      网友评论

          本文标题:2018-11-10 反转整数

          本文链接:https://www.haomeiwen.com/subject/mfpzxqtx.html