电影网-个人网站建设论文,中国室内设计师网官网,wordpress 教程 推荐,有个可以做图片的网站题目描述
给出基数为 -2 的两个数 arr1 和 arr2#xff0c;返回两数相加的结果。
数字以 数组形式 给出#xff1a;数组由若干 0 和 1 组成#xff0c;按最高有效位到最低有效位的顺序排列。例如#xff0c;arr [1,1,0,1] 表示数字 (-2)^3 (-2)^2 (-2)^0 -3。数组形式…题目描述
给出基数为 -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 组成的数组。
示例 1
输入arr1 [1,1,1,1,1], arr2 [1,0,1]
输出[1,0,0,0,0]
解释arr1 表示 11arr2 表示 5输出表示 16 。示例 2
输入arr1 [0], arr2 [0]
输出[0]示例 3
输入arr1 [0], arr2 [1]
输出[1]提示
1 arr1.length, arr2.length 1000arr1[i] 和 arr2[i] 都是 0 或 1arr1 和 arr2 都没有前导0 解析
实现两个以负二进制形式表示的数的加法。让我们一步步来解析下面的代码
函数首先获取两个输入数组的长度分别为arr1和arr2并计算它们的和sum1和sum2。在这个过程中它是从数组的最低位右边开始并使用负二的幂从1到m和n进行加权。之后将这两个和相加得到的结果是两个数的和s。然后进入一个循环该循环会一直执行直到s变为0。在每次循环中它都会取s的绝对值的余数然后插入到结果列表的开头。然后它会将s减去这个余数并除以-2然后再检查s是否为0。如果s为0那么就会跳出循环。最后返回结果列表。这个列表就是原始的输入数组的负二进制表示形式的和。
这个代码的主要思想是模拟在常规二进制系统中的加法运算但所有的运算都以负二进制的格式进行。
python代码
class Solution:def addNegabinary(self, arr1: list[int], arr2: list[int]) - list[int]:mlen(arr1)nlen(arr2)sum10sum20for i in range(m):sum1arr1[m-i-1]*(-2)**(i)for j in range(n):sum2arr2[n-j-1]*(-2)**(j)i0s sum1 sum2ls[]while 1:yvint(abs(s%(-2)))ls.insert(0,yv)s(s-yv)//(-2)if s0:breakreturn ls
运行结果