[题解][LeetCode][Divide Two Integers]

来源:互联网 发布:ic卡制作软件 编辑:程序博客网 时间:2024/05/18 00:15

题目:

Divide two integers without using multiplication, division and mod operator.


题解:

位运算

最简单的方法当然是直接 被除数减除数,直到为0. 这样太慢,会超时。

改进,被除数减去除数的幂次。

被除数 = 除数*2^a + 除数*2^b + ....

例如 47/7 = 7*2^2 + 7*2^1 + 5

答案就是2^2 + 2^1 = 6


那么我们就需要将divisor先左移至比dividend稍小的值,

然后dividend减去divisor(此时dividend比divisor小)

右移divisor(减小),直至比dividend小,

dividend减去divisor。

循环往复,直至dividend为0


其中,记录2的幂次的变量,需要和divisor共进退(同时左移/右移)


Code:

class Solution:    # @return an integer    def divide(self, dividend, divisor):        if divisor == 1:        return dividend        if divisor == -1:        return -dividend                flag = True        if divisor < 0:        divisor = -divisor        flag = not flag        if dividend < 0:        dividend = -dividend        flag = not flag                if divisor > dividend:        return 0                ans = 0        i = 1        k = divisor        while k+k < dividend :        k = k << 1        i = i << 1       dividend -= k       ans += i        while dividend > 0:        while k > dividend:        k = k >> 1        i = i >> 1        dividend -= k        ans += i        if not flag:        ans = -ans        return ans




0 0
原创粉丝点击