class Solution(object):
def divide(self, dividend, divisor):
"""
:type dividend: int
:type divisor: int
:rtype: int
不能用加减乘,二分查找?
递归:
出口:相差小于一个divisor
本体:如果大了回退(剪枝)?
倍数乘divisor
不回退的时候
不好递归,那么就,找到最高位,全部压栈,然后一个一个的退栈,直到和跟被除数的差值小于被除数
"""
time_re=0
stack_tem=[]#这个栈就是存放二进制最高位以及以下位的
time=1#初始倍数
top_digit=abs(divisor)
abs_dividend=abs(dividend)
while abs_dividend>=top_digit:#进行二进制加,小于被除数时入栈,就把最高位及以下位数压栈
stack_tem.append([time,top_digit])
time+=time
top_digit+=top_digit
for i in stack_tem[::-1]:#出栈,挨个减,判断是否大于0,如果是说明这一位是相应的二进制1,加到最终结果中去,否则,即0,不进行操作
if abs_dividend-i[1]>=0:
time_re+=i[0]
abs_dividend-=i[1]
else:
pass
if (divisor>0 and dividend>0)or (divisor<0 and dividend<0):
if time_re>2147483647:
return 2147483647
else:
return time_re
else:
if time_re>2147483648:
return 2147483647
else:
return 0-time_re
这里有个问题就是-2^31~2^31-1我本来是想直接检查栈长是否大于32的,但是2^31-1居然不超,真的难受,看看别人的算法说不定有新的思路