二进制求和

解题思路:

  1. 两个二进制数字相加,从它们的末位开始遍历:

    • 若对应位数都是 0,则依然是 0,进位为 0;
    • 若一个是 0,一个是 1,则变成 1,进位为 0;
    • 若两个都是 1,则变为 0,进位为 1;
  2. 因为二进制只有 0,1,根据以上规律,容易联想到异或运算:

    • 两数相同异或为 0,0 与任意数字异或为数字本身;
    • 所以相加的位数为 a[i] ^ b[j] ^ add;
    • 初始化进位 add = 0,若 a[i]、b[i]、add 中有两个及两个以上数字为1,则 add 为 1;
  3. 遍历数组后,已更改全部位数,若此时进位为 1,则需在首部添加 1;

代码实现:

JS
TS
var addBinary = function (a, b) {
  let add = 0;
  let sum = [];

  for (let i = a.length - 1, j = b.length - 1; i >= 0 || j >= 0; i--, j--) {
    // 位数不够,默认为 0
    let num1 = +a[i] || 0;
    let num2 = +b[j] || 0;

    // 两数相同异或为0,0与任意数字异或为数字本身
    sum.unshift(num1 ^ num2 ^ add);
    add = num1 + num2 + add > 1 ? 1 : 0;
  }

  if (add === 1) sum.unshift(1);

  return sum.join('');
};
function addBinary(a: string, b: string): string {
  let add = 0;
  let sum = [];

  for (let i = a.length - 1, j = b.length - 1; i >= 0 || j >= 0; i--, j--) {
    // 位数不够,默认为 0
    let num1 = +a[i] || 0;
    let num2 = +b[j] || 0;

    // 两数相同异或为0,0与任意数字异或为数字本身
    sum.unshift(num1 ^ num2 ^ add);
    add = num1 + num2 + add > 1 ? 1 : 0;
  }

  if (add === 1) sum.unshift(1);

  return sum.join('');
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 二进制求和
  2. 2. 解题思路:
  3. 3. 代码实现: