LeetCode-Python-1073. 负二进制数相加

本文介绍了一种处理-2进制数相加的算法,通过将输入的两个数组形式的-2进制数转换为整数,进行加法运算后,再将结果转换回-2进制数组形式输出。示例展示了如何使用该算法计算两个特定-2进制数的和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出基数为 -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. 1 <= arr1.length <= 1000
  2. 1 <= arr2.length <= 1000
  3. arr1 和 arr2 都不含前导零
  4. arr1[i] 为 0 或 1
  5. 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])

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值