Leetcode刷题笔记

第三十六天 Reverse Integer

2018-09-28  本文已影响4人  业余马拉松选手

今天去有一场技术分享,回家后整个人都有点累
继续坚持着刷一道题

https://leetcode-cn.com/problems/reverse-integer/description/

其实也是我在面试经常愿意问的一道题,把一个数字逆置

思路就是不断取余和整除10

里面需要注意符号和取值范围,算法本身不复杂,要能一次bug free才是本事!

最先用了一种转字符串的方法,有点丑

class Solution:
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        strRet = ""
        ret = 0
        flag = False
        if x < 0:
            x = abs(x)
            flag = True
        while x > 0:
            strRet += str(x%10)
            x = x//10
        if strRet == "":
            return 0
        if flag:
            ret = int(strRet) * -1
        else:
            ret = int(strRet)
        if ret > 2**31-1 or ret < -1*2**31:
            return 0
        else:
            return ret

这段代码太硬了,就有了一个优化点的方案,算法的思路并没有变,只是改了下语法和实践方法

class Solution:
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        a = abs(x)
        r = 0
        while a > 0:
            r = r * 10 + a % 10
            a = a//10
        if x > 0 and r < 1*2**31:
            return r
        elif x < 0 and r <= 2**31-1:
            return -r
        else:
            return 0
上一篇 下一篇

猜你喜欢

热点阅读