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;
}
相关推荐
安妮细水长流6 小时前
ad7124
c语言·单片机
文丑颜不良啊6 小时前
LeetCode2441~2460题目解析
java·leetcode
文丑颜不良啊7 小时前
LeetCode2521~2540题目解析
java·leetcode
lisw058 小时前
Dayhoff的PAM替换矩阵理论评介!
线性代数·算法·矩阵
一起学安全技术9 小时前
拆大模型 03|注意力的一句话版本:不用论文讲清 Attention
深度学习·算法·语言模型·transformer
Delightrs10 小时前
Rust LeetCode238 算法题解
开发语言·算法·rust
自信1504130575910 小时前
重生之从0开始学习c++之——vector-中篇
c++·学习·算法
文丑颜不良啊10 小时前
LeetCode2501~2520题目解析
java·leetcode
GoAI21 小时前
DeepSeek Harness Memory (一)主流记忆插件总结
后端·算法·面试