LeetCode //C - 1073. Adding Two Negabinary Numbers

1073. Adding Two Negabinary Numbers

Given two numbers arr1 and arr2 in base -2, return the result of adding them together.

Each number is given in array format: as an array of 0s and 1s, from most significant bit to least significant bit. For example, arr = 1,1,0,1 represents the number (-2)^3 + (-2)^2 + (-2)^0 = -3. A number arr in array, format is also guaranteed to have no leading zeros: either arr == 0 or arr0 == 1.

Return the result of adding arr1 and arr2 in the same format: as an array of 0s and 1s with no leading zeros.

Example 1:

Input: arr1 = 1,1,1,1,1, arr2 = 1,0,1

Output: 1,0,0,0,0

Explanation: arr1 represents 11, arr2 represents 5, the output represents 16.

Example 2:

Input: arr1 = 0, arr2 = 0

Output: 0

Example 3:

Input: arr1 = 0, arr2 = 1

Output: 1

Constraints:
  • <= arr1.length, arr2.length <= 1000
  • arr1i and arr2i are 0 or 1
  • arr1 and arr2 have no leading zeros

From: LeetCode

Link: 1073. Adding Two Negabinary Numbers


Solution:

Ideas:

In base -2, each position represents powers of (-2)^k, so:

  • Carry must flip sign compared to normal binary
  • This formula automatically handles cases like:
    • sum = 2 → bit = 0, carry = -1
    • sum = -1 → bit = 1, carry = 1
Code:
c 复制代码
int* addNegabinary(int* arr1, int arr1Size, int* arr2, int arr2Size, int* returnSize) {
    int i = arr1Size - 1, j = arr2Size - 1;
    int carry = 0;

    int maxSize = arr1Size + arr2Size + 5;
    int* res = (int*)malloc(sizeof(int) * maxSize);
    int k = 0;

    while (i >= 0 || j >= 0 || carry != 0) {
        int sum = carry;

        if (i >= 0) sum += arr1[i--];
        if (j >= 0) sum += arr2[j--];

        res[k++] = sum & 1;           // result bit
        carry = -(sum >> 1);          // special carry for base -2
    }

    // remove leading zeros
    while (k > 1 && res[k - 1] == 0) {
        k--;
    }

    // reverse result
    int* ans = (int*)malloc(sizeof(int) * k);
    for (int p = 0; p < k; p++) {
        ans[p] = res[k - 1 - p];
    }

    free(res);

    *returnSize = k;
    return ans;
}
相关推荐
alphaTao2 小时前
LeetCode 每日一题 2026/7/6-2026/7/12
算法·leetcode
想吃火锅10052 小时前
【leetcode】56.合并区间js
算法·leetcode·职场和发展
imuliuliang2 小时前
可合并堆在多任务调度中的优势与实现技巧7
算法
学究天人2 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷6)
网络·算法·数学建模·动态规划·几何学·图论·拓扑学
wabs6662 小时前
关于动态规划【力扣72.编辑距离的思考】
算法·leetcode·动态规划
用户333239768842 小时前
我做了一个 RepoMind:让 AI 写架构前,先去看看真实开源项目
算法
chh5632 小时前
C++--list
开发语言·数据结构·c++·学习·算法·list
killerbasd3 小时前
总结 7。10
人工智能·算法·机器学习
林间码客3 小时前
RAG系统评估指南:从入门到实践
人工智能·算法·机器学习
凌波粒3 小时前
LeetCode--47.全排列 II(回溯算法)
算法·leetcode·职场和发展