給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。
返回被除數 dividend 除以除數 divisor 得到的商。
示例 1:
輸入: dividend = 10, divisor = 3
輸出: 3
示例 2:
輸入: dividend = 7, divisor = -3
輸出: -2
說明:
一定要好好看說明,說明中一半都是邊界條件,這裡先不說演算法,說明中已經界定了輸入範圍其實就是[−2
31,231
−1
][−2^, 2^ − 1]
[−231,
231−
1],所以不用考慮這個範圍之外的情況。這個題目解決的思想有些像二分法,可以叫翻倍法,被除數如果大於除數,那麼可以一直減到小於,這樣計數減的次數可以得到商,基本思想還是這樣,只是為了減小複雜度,如果被除數大於除數,那麼就把除數乘二,相應的計數也乘二,這裡不能用乘法可以左移,然後一直到被除數小於翻倍後的除數,這樣就可以算出這一次有多少個除數,減去之後再次重複這個過程即可,直到最後被除數小於未翻倍的除數說明計數結束。結果就是商。
c++源**:
class
solution
res +
= cnt;
m -= t;}if
((dividend <0)
^(divisor <0)
) res =
-res;
return res > int_max ? int_max : res;}}
;
python3源**:
class
solution
:def
divide
(self, dividend, divisor)
:"""
:type dividend: int
:type divisor: int
:rtype: int
"""m =
abs(dividend)
n =abs(divisor)
if m < n:
return
0 res =
0while m >= n:
t = n
cnt =
1while m >
(t<<1)
: t <<=1
cnt <<=1
m -= t
res += cnt
if(dividend<0)
^(divisor<0)
: res =
-res
if res >
pow(2,
31)-1
:return
pow(2,
31)-1
else
:return res
LeetCode29題 兩數相除
題目描述 給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數 dividend 除以除數 divisor 得到的商。思路 從除法的定義說,被除數除以除數等於商 餘數。a b c。將c可以用二進位制表示 所以可以從大到小位移,...
leetcode刷題之路29 兩數相除
給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數 dividend 除以除數 divisor 得到的商。示例 1 輸入 dividend 10,divisor 3 輸出 3 示例 2 輸入 dividend 7,divis...
LeetCode演算法題 兩數相除
給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數 dividend 除以除數 divisor 得到的商。示例 1 輸入 dividend 10,divisor 3 輸出 3 示例 2 輸入 dividend 7,divis...