LeetCode 兩數相除

2021-09-22 14:04:06 字數 1809 閱讀 7863

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

本題不可以用乘法 除法,那麼可以將題目轉化為,被除數是多少個除數之和:

如果用累加的方法直接迴圈累加, 會出現超時情況

解決超時情況:

第一反應會想到,使用二分法

例: 57/1

res=1

res=2 -------當57>12

res=4 -------當57>22

res= 8 -------當57>42

res=16 ------當57>82

res=32 ------當57>162

res != 64 ----當57>322

res1=1

res1=2 -------當57-321>12

res1=4 -------當57-321>22

res1=8 -------當57-321>42

res1=16 ------當57-321>82

res1!=16 -----當57-321>162

同理 res2 = 8 ,res3=1

res = res+res1+res2 +res3=32+16+8+1=57

進一步修改演算法:使用位移演算法,且從最大res考慮 即 最開始考慮res==2**31情況,dividend>res2, 當 條件成立時,即為本次迴圈的res, dividend-resdivisor 進行下一輪迴圈。

LeetCode 兩數相除

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

LeetCode 兩數相除

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

leetcode 兩數相除

兩數相除跳轉 相同的值,直接返回 if dividend divisor return flag 1 1 大於半數的值,直接返回 if divisor integer.min value 1 dividend divisor return flag 1 1 尋找到乙個最大的除數的倍數 int i f...