給定兩個整數,被除數dividend
和除數divisor
。將兩數相除,要求不使用乘法、除法和mod
運算子。
返回被除數dividend
除以除數divisor
得到的商。
示例 1:
輸入: dividend = 10, divisor = 3
輸出: 3
示例 2:
輸入: dividend = 7, divisor = -3
輸出: -2
說明:
無。參考:leetcode 題解
使用位移法:左移1相當於乘以2,右移1相當於除以2。
解題思路:
若計算100 / 3
,且100 = 3 * 33 + 1
,其中33 = 32 + 1 = 2 ^ 5 + 2 ^ 0
。我們可以用100不斷減去3的倍數,直到值小於3為止。
實質:當dividend
和divisor
都為正數時,用dividend
不斷減去divisor
的倍數,直到dividend < divisor
為止。否則,若當dividend
和divisor
都為負數時,用dividend
不斷加上divisor
的倍數,直到dividend > divisor
為止。
class
solution
dividend -= tmp;
// dividend加上當前不小於dividend的divisor的最大倍數
result += tmp_result;
// divisor的總倍數,(-2)^5 + (-2)^0 = -33}if
(!positive)
return result;
}}
時間複雜度:o()
o()o(
);空間複雜度:o(1
)o(1)
o(1)
。
學渣帶你刷Leetcode0029兩數相除
給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數 dividend 除以除數 divisor 得到的商。整數除法的結果應當截去 truncate 其小數部分,例如 truncate 8.345 8 以及 truncate ...
leetcode騰訊精選練習50(1) 兩數相加
這是一道來自leetcode的演算法題目。給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸...
Python實現leetcode 2 兩數相加
原題位址 python實現單向無序鍊錶 singly linked list 可參考鏈結 definition for singly linked list.class listnode def init self,x self.val x self.next none 將單向無序鍊錶轉為字串形式。...