leetcode-mid-math-29. Divide Two Integers

Posted rosyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-mid-math-29. Divide Two Integers相关的知识,希望对你有一定的参考价值。

mycode   91.28%

class Solution(object):
    def divide(self, dividend, divisor):
        """
        :type dividend: int
        :type divisor: int
        :rtype: int
        """
        if divisor == 0:
            return None
        if((dividend^divisor)<0):
            flag = -1
        else:
            flag = 1
        dividend = abs(dividend) if dividend < 0 else dividend
        divisor = abs(divisor) if divisor < 0 else divisor
        MAX = 2147483647
        MIN = -2147483648 
        res = (dividend // divisor)
        if flag == -1:
            return max(MIN,flag*res)
        else:
            return min(MAX,res)

 

参考:

思路:其实时不能用除法运算的,但是我还是用了。。。。

这道题的要求是在不使用乘法、除法、取模运算的前提下实现两个整数相除。如果溢出,返回MAX_INT。这道题的直接思路是用被除数不断减去除数,直到为0。这种方法的迭代次数是结果的大小,即比如结果为n,算法复杂度是O(n)。可以采用位运算进行优化,即模拟计算机上的除法运算。将整数转化成二进制形式,即num = a0*2^0 + a1*2^1 + a2*2^2 + ... + an*2^n。基于以上这个公式以及左移一位相当于乘以2,可以先让除数左移直到大于被除数之前得到一个最大的基数。然后每次用被除数去减去这个基数,同时结果增加2^k。接下来继续重新左移除数左移迭代,直到被除数不大于除数为止。因为这个方法的迭代次数是按2的幂直到结束,所以时间复杂度为O(logn)。值得注意的地方,主要就是处理符号和溢出问题。对于溢出问题,可以先采用long long进行计算,也可以在移位前判断移位后是否溢出。

#时间复杂度:O(logn)
#空间复杂度:O(1)

def divide(dividend, divisor):
        """
        :type dividend: int
        :type divisor: int
        :rtype: int
        """
        positive = (dividend < 0) is (divisor < 0)
        dividend, divisor = abs(dividend), abs(divisor)
        res = 0
        while dividend >= divisor:
            temp, i = divisor, 1
            print(dividend,divisor,temp,i,res)
            while dividend >= temp:
                dividend -= temp
                res += i
                i <<= 1
                temp <<= 1
                print(..,dividend,divisor,temp,i,res)
        if not positive:
            res = -res
        return min(max(-2147483648, res), 2147483647)       

 

以上是关于leetcode-mid-math-29. Divide Two Integers的主要内容,如果未能解决你的问题,请参考以下文章

由父div确定子div大小

如何把一个div放在另一个div的下面?

如何使用selenium定位到/html/body/div[6]/div/div/div/div[2]/div/div[2]&#

如何让div并排

设置子div在父div中绝对置于底部之后覆盖了父div里的内容怎么办?

使用动画在 div 之间切换 div