leetcode兩數之和怎麼算?本文答案參考自leetcode衆網友的題解(因為沒有官方題解[尬笑]),我來為大家講解一下關于leetcode兩數之和怎麼算?跟着小編一起來看一看吧!
leetcode兩數之和怎麼算
本文答案參考自leetcode衆網友的題解。(因為沒有官方題解[尬笑])
題目描述
給定兩個整數,被除數 dividend 和除數 divisor。将兩數相除,要求不使用乘法、除法和 mod 運算符
返回被除數 dividend 除以除數 divisor 得到的商。
整數除法的結果應當截去(truncate)其小數部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
不能使用乘法、除法和 mod 運算符 ?[思考]
那還有什麼運算呢?
對了,還有 加減 以及 比較底層的 位運算
此外,這裡還有正負号的問題,相信大家應該可以應對[靈光一閃]。
【方法1】(加)減法以及(位運算)優化小學二年級([看])就學過:多次加就是乘,多次減就是除。
所以,我們可以用多次減法來模拟除法,像這樣:
9 / 2 = 4 (整除)
就等于 9 - 2 - 2 - 2 - 2 = 1
- 開啟循環,每次循環中将 被除數 減去 除數,并記錄次數
- 當 被除數 小于 除數 時結束循環,所記錄的次數就是答案。
這就是中等 (・∀・*)?怎麼可能!
如果要計算 1000000 / 1 ,那豈不是要減很多很多次?
有人說,可以判斷呀,判斷除數是不是 1.
那 1000000 / 2 ,1000000 / 3 也要判斷?
這不可能的吧 o((>ω< ))o
所以我們可以 放大除數 ,像這樣:
9 / 2 = 9 / 4 * 2 = 4
- 同樣開啟循環,每次循環中
- 如果 被除數 大于 除數,則将除數乘以二(對2情有獨鐘啊[耶]),直到被除數 小于 除數,然後将 被除數 減去 除數,并記錄 相當于原除數做減法 的次數
- 如果 被除數 小于 除數
- 如果除數是放大過的,則将除數除以二
- 如果除數是原來的,即可得到答案(即次數)
以上過程嚴格按照程序邏輯排版
其中,乘以二除以二的操作可以通過左右位移來實現
即 除數 << 1 表示乘以二,除數 >> 1 表示除以二
當然得注意除數的溢出問題。
以上描述可能有點細節上的模糊,但隻需理解其思想就行了( 吧?(⊙﹏⊙))
[來看我][來看我][來看我]
,