-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathdividetwointegrers.py
73 lines (55 loc) · 1.89 KB
/
dividetwointegrers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
"""
Divide Two Integers
O(logn)
O(logn)
"""
class Solution:
def divide(self, dividend: int, divisor: int) -> int:
# Constants.
MAX_INT = 2147483647 # 2**31 - 1
MIN_INT = -2147483648 # -2**31
if dividend == MIN_INT and divisor == -1:
return MAX_INT
quotient = 0
sign = 1
if dividend < 0:
sign = sign * -1
dividend = dividend * -1
if divisor < 0:
sign = sign * -1
divisor = divisor * -1
while dividend >= divisor:
powerOfTwo = 1
value = divisor
while value + value <= dividend:
value += value
powerOfTwo += powerOfTwo
dividend = dividend - value
quotient += powerOfTwo
quotient = quotient * sign
return quotient
class Solution:
def divide(self, dividend: int, divisor: int) -> int:
# Constants.
MAX_INT = 2147483647 # 2**31 - 1
MIN_INT = -2147483648 # -2**31
if dividend == MIN_INT and divisor == -1:
return MAX_INT
quotient = 0
sign = 1
if dividend < 0:
sign = sign * -1
dividend = dividend * -1
if divisor < 0:
sign = sign * -1
divisor = divisor * -1
while dividend >= divisor:
powerOfTwo = 1
value = divisor
while (value << 1) <= dividend:
value <<= 1
powerOfTwo <<= 1
dividend = dividend - value
quotient += powerOfTwo
quotient = quotient * sign
return quotient