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

 

posted @ 2018-02-28 23:06  vlice  阅读(114)  评论(0编辑  收藏  举报