44.leetcode29_divide_two_integers

Posted vlice

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于44.leetcode29_divide_two_integers的主要内容,如果未能解决你的问题,请参考以下文章

HTML_29_列表标签

29 伪造ICMP数据包的IP层

29 伪造ICMP数据包的IP层

__x__(29)0908第五天__高度塌陷 问题

Python--29 魔法方法:定制序列

Xcode 7.3 的无效位码版本(生产者:'800.0.42.1_0' 读者:'703.0.29_0')