leetcode29 兩數相除

2021-09-30 17:34:56 字數 1384 閱讀 5622

給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。

返回被除數 dividend 除以除數 divisor 得到的商。

示例 1:

輸入: dividend = 10, divisor = 3

輸出: 3

示例 2:

輸入: dividend = 7, divisor = -3

輸出: -2

說明:被除數和除數均為 32 位有符號整數。

除數不為 0。

假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231, 231 − 1]。本題中,如果除法結果溢位,則返回 231 − 1。

不能用除法,那就只能用減法咯~首先想到的是一次一次的減,這樣就太慢了,所以最後以指數遞增的方式做減法,直到被除數小於除數才停止。注意要先判斷符號,然後再對兩個正數相除:

class

solution

:def

divide

(self, dividend, divisor)

:"""

:type dividend: int

:type divisor: int

:rtype: int

"""max_int, min_int =2**

31-1,

-2**31

sign =-1

ifmin

(dividend, divisor)

<

0and

max(dividend, divisor)

>

0else

1 up, down =

abs(dividend)

,abs

(divisor)

res = self.divide_positive(up, down)

if sign ==-1

: res =

-res

if res > max_int or res < min_int:

return max_int

return res

defdivide_positive

(self, up ,down)

: res, tmp, i =

0, down,

1while up >= tmp:

res += i

up -= tmp

tmp =

2* tmp

i =2*i

if up >= down:

res += self.divide_positive(up, down)

return res

LeetCode29 兩數相除

給定兩個整數,被除數dividend和除數divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數dividend除以除數divisor得到的商。示例 1 輸入 dividend 10,divisor 3輸出 3示例 2 輸入 dividend 7,divisor 3輸出 2說...

LeetCode 29 兩數相除

給定兩個整數,被除數dividend和除數divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數dividend除以除數divisor得到的商。示例 1 輸入 dividend 10,divisor 3 輸出 3 示例 2 輸入 dividend 7,divisor 3 輸出...

leetcode 29 兩數相除

給定兩個整數,被除數dividend和除數divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數dividend除以除數divisor得到的商。示例 1 輸入 dividend 10,divisor 3輸出 3示例 2 輸入 dividend 7,divisor 3輸出 2說...