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