美文网首页
29.leetcode题目讲解(Python):两数相除

29.leetcode题目讲解(Python):两数相除

作者: 夏山闻汐 | 来源:发表于2018-10-27 11:41 被阅读76次

    题目:


    题目

    这道题直接使用减法会来实现会超过时间限制,特别是 2^{31} - 1 / 1 这种情况。实现的思路是采用我们小学学过的除法计算方式:

    除法示意

    通过移位操作,我们可以使用二进制除法来解这套题, 参考代码如下(思路来源zemer):

    class Solution:
        def divide(self, dividend, divisor):
            """
            :type dividend: int
            :type divisor: int
            :rtype:
    
            """
            res = 0
            if dividend == 0:
                return res
    
            # 初始化
            i = 0
            res = 0
            p = abs(dividend)
            q = abs(divisor)
    
            # 移位对齐被除数的最左端
            while q << i <= p:
                i = i + 1
    
            # 利用二进制进行除法运算
            for j in reversed(range(i)):
                if q << j <= p:
                    p = p - (q << j)
                    res = res + (1 << j)
    
            # 内存限制
            if (dividend > 0) != (divisor > 0) or res < -1 << 31:
                res = -res
    
            return min(res, (1 << 31) - 1)
    

    其它题目:leetcode题目答案讲解汇总(Python版 持续更新)

    ps:如果您有好的建议,欢迎交流 :-D,
    也欢迎访问我的个人博客 苔原带 (www.tundrazone.com)

    相关文章

      网友评论

          本文标题:29.leetcode题目讲解(Python):两数相除

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