給定兩個整數,被除數 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說...