原题
https://leetcode.cn/problems/divide-two-integers/description/
思路
倍增除数
复杂度
时间:O(log(n))
空间:O(1)
Python代码
class Solution:
def divide(self, dividend: int, divisor: int) -> int:
# 符号
sign = 1 if (dividend > 0 and divisor > 0 ) or (dividend < 0 and divisor < 0) else -1
ans = 0
# 求绝对值
dividend, divisor = abs(dividend), abs(divisor)
while dividend >= divisor:
# 临时除数
temp = divisor
# 商
quotient = 1
while dividend >= temp + temp:
temp += temp
quotient += quotient
ans += quotient
dividend -= temp
# 乘以符号
ans *= sign
# 确定范围
return max(-2**31, min(ans, 2**31 - 1))
Go代码
func divide(dividend int, divisor int) int {
// 符号
var sign int
if (dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0) {
sign = 1
} else {
sign = -1
}
ans := 0
// 求绝对值
if dividend < 0 {
dividend = -dividend
}
if divisor < 0 {
divisor = -divisor
}
for dividend >= divisor {
// 临时除数
temp := divisor
// 商
quotient := 1
for dividend >= temp+temp {
temp += temp
quotient += quotient
}
ans += quotient
dividend -= temp
}
// 乘以符号
ans *= sign
// 确定范围
return max(math.MinInt32, min(ans, math.MaxInt32))
}
1736

被折叠的 条评论
为什么被折叠?



