二进制加法

题目

剑指 Offer II 002. 二进制加法

给定两个字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。

输入为 非空 字符串且只包含数字 1 和 0。

思路

代码

1. 模拟 「列竖式」

var addBinary = function (num1, num2) {
  let res = "";
  let i1 = num1.length - 1;
  let i2 = num2.length - 1;
  let carry = 0;
  while (i1 >= 0 || i2 >= 0) {
    const x = i1 >= 0 ? num1[i1] - "0" : 0;
    const y = i2 >= 0 ? num2[i2] - "0" : 0;

    const sum = x + y + carry;
    res = (sum % 2) + res;
    carry = Math.floor(sum / 2);

    i1--;
    i2--;
  }
  if (carry) {
    res = carry + res;
  }
  return res;
};