题目:​​原题链接​(中等)

标签:数学、二分查找

解法

时间复杂度

空间复杂度

执行用时

Ans 1 (Python)

O ( l o g N )

O ( 1 )

40ms (77.79%)

Ans 2 (Python)

Ans 3 (Python)

解法一:

class Solution:
def divide(self, dividend: int, divisor: int) -> int:
# 将被除数和除数均转化为整数
flag = 1 # 正负号标记
if dividend < 0:
flag, dividend = -flag, -dividend
if divisor < 0:
flag, divisor = -flag, -divisor

ans = 0
while dividend >= divisor:
# 每个循环计算当前商的最高二进制位
now = divisor # 当前除数
mult = 1 # 当前除数的倍数(二进制位)
while now + now <= dividend: # 如果(除数*2)小于被除数,则除数*2,直至除数大于等于被除数
now += now
mult += mult

dividend -= now # 从被除数中减去当前部分的商
ans += mult # 将当前的商加到结果中

ans = ans if flag == 1 else -ans
return ans if ans != 2147483648 else 2147483647 # 唯一能够超出的方法:(-2147483648)/(-1)=2147483648>2147483647