[題解][LeetCode][Divide Two Integers]

題目:

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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章