码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode-mid-math-29. Divide Two Integers

时间:2019-06-06 09:24:27      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:转化   long   object   优化   divide   结束   基于   大小   模拟   

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

标签:转化   long   object   优化   divide   结束   基于   大小   模拟   

原文地址:https://www.cnblogs.com/rosyYY/p/10983050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!