Leetcode

[Leetcode]7. 整数反转

2019-01-22  本文已影响0人  LeeYunFeng

题目描述:
题目难度:简单
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

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

笨办法:
该题比较简单,解题方法很直观。所谓笨办法,也就是第一反应的解法,没有经过细节的优化。
基本的思路是:记录下整数的正/负符号,对整数取绝对值。从低位到高位逐位左移,通过取余数得到整数的各个位,将各个位存入数组。利用数组中的数字v和索引i,就可以得到反转后的整数的各位。索引i处的数字v,对应反转后的整数位为v*10 **(l-i-1),其中l表示数组的长度。注意:不要忘记把正负符号加回来,以及对超过合法范围的情况的处理。

聪明办法:
参考官方提示,大体的思路基本与前述方法一致。但在细节处理上可以更加简单,比如根本就不需要用到数组。具体的处理步骤如下:

笨办法:
用时40ms,此方法击败了30%的用户。

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        s=[]#记录整数的各个位
        op=1 if x>0 else -1#符号
        n=abs(x)
       hi,lo=2**31-1,-2**31
       while n>0:
           s.append(n%10)
           n=n//10
       # 注意符号
       l=len(s)
       res=0
       for i,v in enumerate(s):
           res=res+v*10**(l-i-1)
       res=op*res
       if res>=hi or res<=lo:
           return 0
       return res

聪明的方法:
同时也是简洁的方法,此方法用时36ms,击败了93%的用户。

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        op=1 if x>0 else -1#符号
        n=abs(x)
        ans=0
        while n>0:
            ans=ans*10+n%10
            n=n//10
        return ans*op if ans<=0x7FFFFFFF else 0
上一篇下一篇

猜你喜欢

热点阅读