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;
}
相关推荐
黄河123长江3 分钟前
有限Abel群的结构()
算法
Jerry43 分钟前
LeetCode 92. 反转链表 II
算法
骊城英雄1 小时前
Rust从入门到精通-trait
人工智能·算法·rust
caishenzhibiao1 小时前
期货先行者主图 同花顺期货通指标
java·c语言·c#
可编程芯片开发1 小时前
基于PI控制算法的pwm直流电机控制系统Simulink建模与仿真
算法
怕浪猫2 小时前
2840亿参数只卖白菜价:DeepSeek V4 Flash 正式版上线,Agent 能力暴涨6倍
人工智能·算法
让学习成为一种生活方式2 小时前
苄基异喹啉生物碱糖基转移酶UGT74AN1晶体--Journal of Agricultural and Food Chemistry
人工智能·算法
alphaTao2 小时前
LeetCode 每日一题 2026/7/27-2026/8/2
python·算法·leetcode
2501_926978332 小时前
提示工程的实战报告(二):模型的失败模式与边界行为
人工智能·深度学习·算法
小小晓.2 小时前
C++记:函数
开发语言·c++·算法