给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字 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) {
const res = [];//结果返回数组
// 用以进位变量
let c = 0;
// 两指针初始化,从最后面尾部开始
let i = a.length - 1;
let j = b.length - 1;
//从后遍历两个二进制数字,或者存在需要进位的时候
while (i >= 0 || j >= 0 || c) {
// 获取指针指向的尾部数字
const aa = Number(a[i]) ? Number(a[i]) : 0;
const bb = Number(b[j]) ? Number(b[j]) : 0;
//计算两数尾部之和,并且加上后面的进位数
let sum = aa + bb + c;
if (sum === 2) { // 如果和为2,则进位,和更新为0
sum = 0;
c = 1;
} else if (sum === 3) { // 如果和为3,则进位,和更新为1
sum = 1;
c = 1;
} else { // 否则进位为0
c = 0;
}
// 把相加后得到的数推入结果数组
res.unshift(sum);
i--;
j--;
}
// 返回字符串
return res.join('');
};