题目描述:
给出基数为 -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
算法:
先求和,再进行进制转换。
参考:1017. 负二进制转换
import math
class Solution:
def addNegabinary(self, arr1: List[int], arr2: List[int]) -> List[int]:
value = self.Count(arr1)+self.Count(arr2)
ls = []
while value :
ls.append( value%(2) )
value = - (value // 2)
return ls[::-1] if ls else [0]
def Count(self, arr):
value = 0
for i, ch in enumerate(arr[::-1]):
if int(ch) == 1:
value += int(math.pow(-2, i))
else:
continue
return value