leetcode 29 兩數相除

2021-09-26 16:36:34 字數 1158 閱讀 1938

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

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

這個題目要求不能用*/%, 然後去求乙個商,最暴力的想法就是去進行遍歷,每一次減去乙個除數,一直到被除數 小於 零 結束。

不過換一下思路,這個可以用二進位制拆分的思想去解決這個問題。

我們知道,任意乙個數字都可以被二進位制表示,那麼這個題目所求的被除數可以被幾個除數表示,也同樣可以進行乙個二進位制的拆分。

類似多重揹包問題的二進位制優化的思路。

首先看被除數可以表示成 2 i * 除數 + 2 j * 除數 + … … ;

然後依次求出i , j 是啥就可以了。

參照大佬的實現。

class solution 

ans +

= count;

up -

= base;

} ans =

((dividend <0)

^(divisor <0)

)?-ans : ans;

return

(ans > int_max || ans < int_min)

? int_max : ans;}}

;

二進位制拆分是很有用的乙個工具,比如說用來解決這個問題。

七隻老鼠,一百瓶藥水,其中有一瓶是毒藥,毒發時間為一天,使用一天時間檢測出毒藥

對100瓶毒藥進行二進位制編碼,0000001,0000010,…,1100100

老鼠分別為a,b,c,d,e,f,g

a老鼠喝編碼格式為1******的藥水

b老鼠喝編碼格式為x1***xx的藥水

c老鼠喝編碼格式為xx1***x的藥水

d老鼠喝編碼格式為***1***的藥水

e老鼠喝編碼格式為***x1xx的藥水

f老鼠喝編碼格式為***xx1x的藥水

g老鼠喝編碼格式為******1的藥水

最後檢視老鼠死亡情況,假如c和d死亡,說明0011000為毒藥。

神奇。

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說...