leetcode 67题

Posted by franki on June 30, 2021

leetcode 67题 二进制求和

给你两个二进制字符串,返回它们的和(用二进制表示)。

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

示例1

输入: a = "11", b = "1"
输出: "100"

示例2

输入: a = "1010", b = "1011"
输出: "10101"

思路

像10进制一样,二进制求和需要满足满二进一的特性

代码

/**
 * @param {string} a
 * @param {string} b
 * @return {string}
 */
function addBinary(a, b) {
  let ans = '';
  let ca = 0;
  for (let i=a.length-1, j=b.length-1; i>=0 || j>=0; i--, j--) {
    let sum = ca;
    sum += i >= 0 ? parseInt(a[i]) : 0;
    sum += j >= 0 ? parseInt(b[j]) : 0;
    ans += sum % 2;
    ca = Math.floor(sum / 2);
  }
  ans += ca === 1 ? ca : '';
  return ans.split('').reverse().join('');
}

复杂度分析:

  • 时间复杂度: O(N)
  • 空间复杂度:O(1)