正在处理以下算法难题,需要处理溢出情况。我对这一行 min(max(-2147483648, res), 2147483647) 感到困惑,如果有人可以评论它如何处理溢出,那就太好了。 :)
顺便说一句,我仍然很困惑为什么我们在做两个整数除法计算时在 Python 中会出现溢出?
发布详细的问题陈述和解决方案,
不使用乘法、除法和模运算符来除两个整数。
如果溢出,返回MAX_INT。
class Solution:
# @return an integer
def divide(self, dividend, divisor):
positive = (dividend < 0) is (divisor < 0)
dividend, divisor = abs(dividend), abs(divisor)
res = 0
while dividend >= divisor:
temp, i = divisor, 1
while dividend >= temp:
dividend -= temp
res += i
i <<= 1
temp <<= 1
if not positive:
res = -res
return min(max(-2147483648, res), 2147483647)
最佳答案
min(max(-2147483648, res), 2147483647)
这是这两件事的结合:
result = max(-2147483648, res)
min(result, 2147483647)
函数max
和 min
分别返回传递给它们的最大和最小数量。
在 max()
的情况下如果res
,请调用在-2147483648
之上, 那么 res
的值被退回。否则,如果数字较小,则返回那个大的负数。这确保从 max()
返回的最小数字电话是-2147483648
.如果res
越大越好,否则会以那个数为最低边界。
min()
call 的作用恰恰相反。它建立了 2147483647
的最大边界如果 res
则返回该数字比它大。
结合起来,这些函数调用确保-2147483648 <= res <= 2147483647
.
最后请注意,在 Python 中,整数的大小并没有真正的限制。所以这些边界只是强制执行而实际上并不需要(至少对于 Python 而言),所以如果这是拼图解决方案所必需的,它可能是拼图的要求。
关于python - Python 中的溢出句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34262057/