Table of Content
题目:
这道题直接使用减法会来实现会超过时间限制,特别是 $2^{31} $ / 1 这种情况。实现的思路是采用我们小学学过的除法计算方式:
通过移位操作,我们可以使用二进制除法来解这套题, 参考代码如下(思路来源zemer):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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) |
如果您有好的建议,欢迎来信与我交流

也欢迎关注微信公众号“苔原带”

