本文介绍: 这个代码的主要思想是模拟在常规二进制系统中的加法运算,但所有的运算都以负二进制的格式进行。给出:数组由若干 0 和 1 组成,按最高有效位到最低有效位的顺序排列。两数的表示形式为:不含前导零、由若干 0 和 1 组成的数组。实现两个以负二进制形式表示的数的加法。arr1 表示 11,arr2 表示 5,输出表示 16。也同样不含前导零:即。,返回两数相加的结果。
题目描述
给出基数为 -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 表示 11,arr2 表示 5,输出表示 16 。
示例 2:
输入:arr1 = [0], arr2 = [0] 输出:[0]
示例 3:
输入:arr1 = [0], arr2 = [1] 输出:[1]
提示:
解析
实现两个以负二进制形式表示的数的加法。让我们一步步来解析下面的代码:
- 函数首先获取两个输入数组的长度,分别为
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]:
m=len(arr1)
n=len(arr2)
sum1=0
sum2=0
for i in range(m):
sum1+=arr1[m-i-1]*(-2)**(i)
for j in range(n):
sum2+=arr2[n-j-1]*(-2)**(j)
i=0
s = sum1 + sum2
ls=[]
while 1:
yv=int(abs(s%(-2)))
ls.insert(0,yv)
s=(s-yv)//(-2)
if s==0:
break
return ls
运行结果
原文地址:https://blog.csdn.net/Python_1981/article/details/134657438
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_3034.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。