leetcode29 Divide Two Integers

 1 """
 2 Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator.
 3 Return the quotient after dividing dividend by divisor.
 4 The integer division should truncate toward zero.
 5 Example 1:
 6 Input: dividend = 10, divisor = 3
 7 Output: 3
 8 Example 2:
 9 Input: dividend = 7, divisor = -3
10 Output: -2
11 """
12 """
13 正确答案,先减第一个,再减double
14 """
15 class Solution:
16     def divide(self, dividend: int, divisor: int) -> int:
17         res = 0
18         positive = (dividend < 0) is (divisor < 0)
19         dividend = abs(dividend)
20         divisor = abs(divisor)
21         while dividend >= divisor:
22             temp, i = divisor, 1
23             while dividend >= temp: #多加了一层循环,是为了避免超时
24                 res += i
25                 dividend -= temp
26                 i = 2*i
27                 temp = 2*temp
28         if not positive:
29             res = - res
30         return min(max(-2147483648, res), 2147483647) #!!!这个范围限制很巧妙
31 
32 """
33 我的答案,一个一个减会超时
34 """
35 class Solution:
36     def divide(self, dividend, divisor):
37         neg = 0
38         res = 0
39         if dividend > 0 and divisor < 0 or divisor > 0 and dividend < 0:
40             neg = 1
41         dividend = abs(dividend)
42         divisor = abs(divisor)
43         while dividend >= divisor:
44             dividend = dividend - divisor
45             res += 1
46         if neg:
47             res = - res
48         return min(max(-2147483648, res), 2147483647)

 

posted @ 2020-02-21 10:05  yawenw  阅读(135)  评论(0编辑  收藏  举报