29. Divide Two Integers*
# Medium
class Solution:
def divide(self, dividend: int, divisor: int) -> int:
# edge case
Min = -(1<<31)
Max = (1<<31) - 1
print(Min, Max)
if dividend < Min or dividend > Max:
print("yes")
return (1<<31) - 1
if abs(divisor) > abs(dividend):
return 0
if divisor == dividend:
return 1
result = self.divid(abs(dividend), abs(divisor))
if (divisor >> 31) != (dividend >> 31):
result = min(max(-result, Min), Max)
else:
result = min(max(result, Min), Max)
return result
def divid(self, target, divisor):
# stop condition
if divisor > target:
return 0
if divisor == target:
return 1
# regular case
i = 0
x = divisor
while x < target:
i = i + 1
x = divisor << i
# print(i, x)
target = target - (x >> 1)
return (1 << (i-1)) + self.divid(target, divisor)
Last updated
Was this helpful?