【Medium】414. Divide Two Integers
Divide two integers without using multiplication, division and mod operator. If it is overflow, return 2147483647
Example:
Given dividend = 100 and divisor = 9, return 11.
解题思路
对于被除数m和除数n,可以写成m = n (a1 2^0 + a2 2^1 + ... + ax 2 ^ x)的形式。因此通过一个循环,首先找出使得 n 2^i <= m 的最大i, 比如11 / 3, 3 2^1 = 6, 3 2^2 = 12 > 11, 所以2^1是要求的最大数。之后将2^1加入结果,并用11-6替换原来的11, 再进行第二次循环:3 2^0 = 3 < 5, 将2 ^ 0加入结果,剩下的2小于被除数3了,表示2是余数,停止循环。
核心代码
a是被除数,b是除数,k是上述讨论的最大的2^i,外循环判断是否只剩下余数,内循环寻找最大的k。
while (a >= b){
c = b;
k = 1;
while (a >= c){
c = c << 1;
k = k << 1;
}
result += k >> 1;
a -= c >> 1;
}
时间空间复杂度
约等于O(log(a/b))
Last updated