题目
输入:a = 7, b = -3
输出:-2
解释:7/-3 = truncate(-2.33333…) = -2
解法
1
- 快速乘法模板
- 把乘数 分解成二进制数,然后 通过移位确定 某二进制位是否为1。然后累计2^n次方
- 用绝对值判断,同或确定flag
- 二分搜索模板[如有需要,搜索栏搜索二分]
- l = mid的话,mid = l+r+1 >>1。同理r = mid的话,就mid = l+r>>1
class Solution:
def divide(self, a: int, b: int) -> int:
def fastMul(x, y): # x*y
ans = 0
while y:
if (y & 1):
ans += x
y >>= 1
x <<=1
return ans
if a == 0:
return 0
flag = not ( a > 0) ^ (b > 0)
# 二分模版
l, r = 0, abs(a)
while l < r:
mid = (l + r + 1) >> 1
if fastMul(mid, abs(b)) <= abs(a):
l = mid
else:
r = mid - 1
res = l if flag else -l
return 2**31 - 1 if res > 2**31-1 or res < -2**31 else int(res)
2倍除
这个解法比上面的快
class Solution:
def divide(self, a: int, b: int) -> int:
ret = 0
flag = (a>0) & (b>0)
a, b = abs(a), abs(b)
def calc(x, y):
n = 1
while x > y << 1:
y <<= 1
n <<= 1
return n, y
while a >= b:
cnt, val = calc(a, b)
ret += cnt
a -= val
ret = -ret if flag else ret
return ret - 1 if ret >= 2 ** 31 else ret
作者:qingfengpython
链接:https://leetcode-cn.com/problems/xoh6Oh/solution/shua-chuan-jian-zhi-offer-day01-zheng-sh-8u0s/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文介绍了两种解决整数除法的算法:快速乘法模板和2倍除法模板。快速乘法模板利用二进制分解和位移操作进行乘法计算,再通过二分搜索找到除法结果。2倍除法模板则通过不断减法和位移优化了计算过程。这两种方法都适用于LeetCode的整数除法问题,提高了计算效率。
172万+

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



