44.leetcode29_divide_two_integers
1.题目描述
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
不使用乘除法的情况下作除法,溢出的话返回MAX-INT。
2.题目分析
这个题的整体AC率说明除法其实也不是那么容易的。
3.解题思路
一开始是直接循环做减法,这么草率的做法不出所料的超时了。于是在里面嵌套了一个循环使除数成倍增加,来节省时间。
1 class Solution(object): 2 def divide(self, dividend, divisor): 3 """ 4 :type dividend: int 5 :type divisor: int 6 :rtype: int 7 """ 8 result=0 9 o1=o2=1 #决定最后结果的正负号 10 n=1 11 MAX_INT=2147483647 12 MIN_INT=-2147483648 13 if dividend<0: #假定两个数都是正的 14 dividend=-dividend 15 o1=-1 16 if divisor<0: 17 divisor=-divisor 18 o2=-1 19 #if divisor==0: 20 #return MAX_INT 21 while dividend>=divisor: 22 temp=divisor #temp=divisor*2**(N-1) 23 while dividend-temp>=0: 24 dividend-=temp 25 result+=n 26 temp+=temp #temp加倍 27 n+=n #n加倍 28 continue 29 n=1 #dividend未除尽,再次循环 30 continue 31 if o1==o2: #判断result符号 32 if result>MAX_INT: #判断是否溢出 33 return MAX_INT 34 return result 35 else: 36 if result<MIN_INT: 37 return MIN_INT 38 return -result