-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathadding_two_negabinary_numbers.py
80 lines (59 loc) · 2.29 KB
/
adding_two_negabinary_numbers.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
74
75
76
77
78
79
80
# Given two numbers arr1 and arr2 in base -2, return the result of adding them together.
# Each number is given in array format: as an array of 0s and 1s, from most significant bit to least significant bit.
# For example, arr = [1,1,0,1] represents the number (-2)^3 + (-2)^2 + (-2)^0 = -3. A number arr in array, format is also
# guaranteed to have no leading zeros: either arr == [0] or arr[0] == 1.
# Return the result of adding arr1 and arr2 in the same format: as an array of 0s and 1s with no leading zeros.
# Example 1:
# Input: arr1 = [1,1,1,1,1], arr2 = [1,0,1]
# Output: [1,0,0,0,0]
# Explanation: arr1 represents 11, arr2 represents 5, the output represents 16.
# Example 2:
# Input: arr1 = [0], arr2 = [0]
# Output: [0]
# Example 3:
# Input: arr1 = [0], arr2 = [1]
# Output: [1]
class Solution:
def addNegabinary(self, arr1: List[int], arr2: List[int]) -> List[int]:
def convertBinary(binary):
iterator_exp = 0
result = 0
for i in reversed(range(len(binary))):
if binary[i] == 0:
iterator_exp += 1
continue
result += (-2)**iterator_exp
iterator_exp += 1
return result
def convertDec(num):
if num == 0:
digits = ['0']
else:
digits = []
while num != 0:
num, remainder = divmod(num, -2)
if remainder < 0:
num, remainder = num + 1, remainder + 2
digits.append(str(remainder))
return ''.join(digits[::-1])
if (len(arr1) == 1):
if arr1[0] == 0:
first_dec = 0
else:
first_dec = 1
else:
first_dec = convertBinary(arr1)
if (len(arr2) == 1):
if arr2[0] == 0:
second_dec = 0
else:
second_dec = 1
else:
second_dec = convertBinary(arr2)
if first_dec == 0:
return arr2
if second_dec == 0:
return arr1
result = first_dec + second_dec
answer = convertDec(result)
return answer