题目:
题目
这道题直接使用减法会来实现会超过时间限制,特别是 / 1 这种情况。实现的思路是采用我们小学学过的除法计算方式:
除法示意通过移位操作,我们可以使用二进制除法来解这套题, 参考代码如下(思路来源zemer):
class Solution:
def divide(self, dividend, divisor):
"""
:type dividend: int
:type divisor: int
:rtype:
"""
res = 0
if dividend == 0:
return res
# 初始化
i = 0
res = 0
p = abs(dividend)
q = abs(divisor)
# 移位对齐被除数的最左端
while q << i <= p:
i = i + 1
# 利用二进制进行除法运算
for j in reversed(range(i)):
if q << j <= p:
p = p - (q << j)
res = res + (1 << j)
# 内存限制
if (dividend > 0) != (divisor > 0) or res < -1 << 31:
res = -res
return min(res, (1 << 31) - 1)
其它题目:leetcode题目答案讲解汇总(Python版 持续更新)
ps:如果您有好的建议,欢迎交流 :-D,
也欢迎访问我的个人博客 苔原带 (www.tundrazone.com)
网友评论