负二进制数相加【LC1073】
给出基数为 -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 组成的数组。
“出狱”啦
-
思路
从低位开始模拟负二进制相加的过程,负数加法每逢2进-1。记cntcntcnt为进位,x=arr1[i]+arr2[j]+cntx=arr1[i]+arr2[j]+cntx=arr1[i]+arr2[j]+cnt
-
当x≥2x \ge 2x≥2时,我们需要将高位进位,但由于在负二进制数中高位永远小于低位,因此我们需要进-1,然后将xxx置为0
(−2)i+1−1=(−2)i (-2)^{i+1-1}=(-2)^i (−2)
-

该文章介绍了一种处理负二进制数相加的方法,从低位开始模拟计算过程,考虑负数加法时逢2进-1的特性。通过迭代数组中的每一位,结合当前进位cnt,更新结果并处理进位。在某些情况下,如x>=2时,进位-1;x=-1时,置位1。最终结果需要反转并去除前导0。代码实现使用了Java,时间复杂度和空间复杂度均为O(m+n),其中m和n分别是输入数组的长度。
最低0.47元/天 解锁文章
5300

被折叠的 条评论
为什么被折叠?



