给出基数为 -2 的两个数 arr1
和 arr2
,返回两数相加的结果。
数字以 数组形式 给出:数组由若干 0 和 1 组成,按最高有效位到最低有效位的顺序排列。例如,arr = [1,1,0,1]
表示数字 (-2)^3 + (-2)^2 + (-2)^0 = -3
。数组形式 的数字也同样不含前导零:以 arr
为例,这意味着要么 arr == [0]
,要么 arr[0] == 1
。
返回相同表示形式的 arr1
和 arr2
相加的结果。两数的表示形式为:不含前导零、由若干 0 和 1 组成的数组。
示例:
输入:arr1 = [1,1,1,1,1], arr2 = [1,0,1]
输出:[1,0,0,0,0]
解释:arr1 表示 11,arr2 表示 5,输出表示 16 。
提示:
1 <= arr1.length <= 1000
1 <= arr2.length <= 1000
arr1
和arr2
都不含前导零arr1[i]
为0
或1
arr2[i]
为0
或1
思路:
先转INT再加再转-2进制数组输出。
class Solution(object):
def addNegabinary(self, arr1, arr2):
"""
:type arr1: List[int]
:type arr2: List[int]
:rtype: List[int]
"""
def convertInt(string):
tmp = 1
string = string[::-1]
res = 0
for i, x in enumerate(string):
res += tmp * int(x)
tmp *= -2
return res
n1 = convertInt(arr1)
n2 = convertInt(arr2)
# print n1, n2, convertInt(self.baseNeg2(n1 + n2))
return self.baseNeg2(n1 + n2)
def baseNeg2(self, N):
"""
:type N: int
:rtype: str
"""
res = []
# n = N
while N:
N, b = divmod(N, 2)
N = -N
res.append(str(b))
return "".join(res[::-1]) or "0"
# return "0" if not n else "".join(res[::-1])