File tree Expand file tree Collapse file tree 2 files changed +92
-0
lines changed Expand file tree Collapse file tree 2 files changed +92
-0
lines changed Original file line number Diff line number Diff line change
1
+ # 题目说明
2
+
3
+ 直接使用减法求解,即用被除数逐个减去除数,统计次数,结果超时
4
+
5
+ ``` python
6
+ class Solution (object ):
7
+ def divide (self , dividend , divisor ):
8
+ """
9
+ :type dividend: int
10
+ :type divisor: int
11
+ :rtype: int
12
+ """
13
+ if not divisor:
14
+ return - 1
15
+ res = 0
16
+ sign = 0
17
+ if dividend < 0 :
18
+ sign = 1
19
+ dividend = abs (dividend)
20
+ while (dividend - divisor) >= 0 :
21
+ res += 1
22
+ dividend -= divisor
23
+ if sign == 1 :
24
+ res = - res
25
+ return res
26
+ ```
27
+
28
+ 因为不能使用其他的运算,网上的基本解法都是使用` 移位运算 ` 处理,` 左移 ` 一位相当于$x * 2 $,` 右移 ` 一位相当于$x/2$,所以可以更快地迭代,我这里使用的是近似于等式$x = a_ {0}* 2^{0}+a_ {1}* 2^{1} + a_ {2}* 2^{2}+ \cdots +a_ {n}* 2^{n}$,然后再把$2^n$累加起来即可,类似一种辗转相除法的变形。实现关键在于处理内外逻辑和变量的迭代上,实现代码如下:
29
+
30
+ ``` python
31
+ class Solution (object ):
32
+ def divide (self , dividend , divisor ):
33
+ """
34
+ :type dividend: int
35
+ :type divisor: int
36
+ :rtype: int
37
+ """
38
+ if not divisor:
39
+ return - 1
40
+ sign = ((dividend >= 0 ) == (divisor >= 0 ))
41
+ dividend = abs (dividend)
42
+ divisor = abs (divisor)
43
+ res = 0
44
+ while dividend >= divisor:
45
+ temp = 1
46
+ tempdivisor = divisor
47
+ while dividend >= tempdivisor:
48
+ tempdivisor = (divisor << temp)
49
+ if dividend >= tempdivisor:
50
+ temp += 1
51
+ res += 2 ** (temp - 1 )
52
+ dividend -= (tempdivisor >> 1 )
53
+ if sign == False :
54
+ res = - res
55
+ return min (max (res, - 2147483648 ), 2147483647 )
56
+ ```
57
+
Original file line number Diff line number Diff line change
1
+ #-*- coding:utf-8 -*-
2
+ '''
3
+ Created on 2017年5月18日
4
+
5
+ @author: huangjiaxin
6
+ '''
7
+ class Solution (object ):
8
+ def divide (self , dividend , divisor ):
9
+ """
10
+ :type dividend: int
11
+ :type divisor: int
12
+ :rtype: int
13
+ """
14
+ if not divisor :
15
+ return - 1
16
+ sign = ((dividend >= 0 ) == (divisor >= 0 ))
17
+ dividend = abs (dividend )
18
+ divisor = abs (divisor )
19
+ res = 0
20
+ while dividend >= divisor :
21
+ temp = 1
22
+ tempdivisor = divisor
23
+ while dividend >= tempdivisor :
24
+ tempdivisor = (divisor << temp )
25
+ if dividend >= tempdivisor :
26
+ temp += 1
27
+ res += 2 ** (temp - 1 )
28
+ dividend -= (tempdivisor >> 1 )
29
+ if sign == False :
30
+ res = - res
31
+ return min (max (res , - 2147483648 ), 2147483647 )
32
+
33
+
34
+ if __name__ == '__main__' :
35
+ print Solution ().divide (10 , 3 )
You can’t perform that action at this time.
0 commit comments