概述
class Solution(object):
def divide(self, dividend, divisor):
Min_Int=-2 ** 31
Max_Int=2**31-1
times=1
Divisor2Quotient=[]
sign=1
if dividend<0:sign=-1
if divisor<0:sign=sign*-1
divisor=abs(divisor)
dividend=abs(dividend)
power = divisor
while (power<=dividend) :
Divisor2Quotient.append([times,power])
times+=times
power+=power
ans=0
for Quotient_part,subtrahend_part in Divisor2Quotient[::-1]:
if (dividend-subtrahend_part<0):
pass
else:
dividend-=subtrahend_part
ans+=Quotient_part
ans=ans*sign
if ans<Min_Int:ans=Min_Int
elif ans>Max_Int:ans=Max_Int
return ans
膜拜一下大佬的写法
class Solution:
def divide(self, dividend, divisor) :
if dividend == -2147483648 and divisor == -1:
return 2147483647
a, b, res = abs(dividend), abs(divisor), 0
for i in range(31, -1, -1):
# 2^i * b <= a 换句话说 a/b = 2^i + (a-2^i*b)/b
if (b << i) <= a:
res += 1 << i
a -= b << i
return res if (dividend > 0) == (divisor > 0) else -res
range(31,-1,-1)也是个迭代器等价于[31:-1:-1]
左移运算符(<<)和右移运算符(>>)
最后
以上就是自信小刺猬为你收集整理的leetcode第29题两数相除--快速乘算法(贪心算法)的全部内容,希望文章能够帮你解决leetcode第29题两数相除--快速乘算法(贪心算法)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复