leetcode 算法题067 (简单016) 二进制求和

leetcode 算法题067 (简单016) 二进制求和

  • 题目介绍
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
  • 示例

输入: a = “11”, b = “1”
输出: “100”

输入: a = “1010”, b = “1011”
输出: “10101”

  • 解法一

/**
 * @param {string} a
 * @param {string} b
 * @return {string}
 */
var addBinary = function(a, b) {
  let sum = '', i = 0, flag = '0', longStr = a.length > b.length ? a : b, shortStr = a.length > b.length ? b : a;
  while(i < shortStr.length) {
    if(shortStr[shortStr.length - 1 - i] === longStr[longStr.length - 1 - i]) {
      sum = flag + sum;
      if(shortStr[shortStr.length - 1 - i] === '1') {
        flag = '1';
      } else {
        flag = '0';
      }
    } else {
      sum = (flag === '1' ? '0': '1') + sum;
    }
    i++;
  }
  while(i < longStr.length) {
    let c = longStr[longStr.length - 1 - i];
    if(c !== flag) {
      sum = '1' + sum;
      flag = '0';
    } else {
      sum = '0' + sum;
    }
    i++;
  }
  return flag === '0' ? sum : '1' + sum;
};

执行用时 : 88ms, 在所有 JavaScript 提交中击败了87.05%的用户

内存消耗 : 35.6MB, 在所有 JavaScript 提交中击败了54.01%的用户

  • 解法二

/**
 * @param {string} a
 * @param {string} b
 * @return {string}
 */
var addBinary = function(a, b) {
  a = a.padStart(Math.max(a.length, b.length), '0');
  b = b.padStart(Math.max(a.length, b.length), '0');
  let sum = '',
    i = a.length - 1,
    flag = '0';
  while (i >= 0) {
    if (a[i] === b[i]) {
      sum = flag + sum;
      flag = (a[i] === '0' ? '0' : '1');
    } else {
      sum = ((flag === '0' ? '1' : '0') + sum);
    }
    i--;
  }
  return flag === '0' ? sum : '1' + sum;
};

执行用时 : 92ms, 在所有 JavaScript 提交中击败了77.27%的用户

内存消耗 : 35.7MB, 在所有 JavaScript 提交中击败了45.57%的用户

  • 注意

如果不存在越界问题 或者想要分割字符串去加 也可以把 string变成二进制 通过位运算去加 然后再转回字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值