算法:二进制求和
题:给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。输入为 非空 字符串且只包含数字 1 和 0。
方法一: 直接将二进制字符串转为十进制再相加(方便简洁)
function addBinary (a, b) {
a = BigInt(`0b${a}`); // 使用 BigInt 解析二进制字符串->十进制bigInt类型 0b:表示后面字符为二级制,0o:八进制 0x:十六进制 十进制不需要前缀
b = BigInt(`0b${b}`);
let c = a + b;
return c.toString(2); // BigInt 的 toString 方法支持二进制输出
};
方法二: 模拟二进制加法逐位计算(性能好)
var addBinary = function (a, b) {
let i = a.length - 1;
let j = b.length - 1;
let result = '';
let carry = 0;
while (i >= 0 || j >= 0) {
let digitA = i >= 0 ? a[i] - '0' : 0;
let digitB = j >= 0 ? b[j] - "0" : 0;
let sum = digitA + digitB + carry;
if (sum > 1) {
carry = 1
sum -= 2;
} else {
carry = 0
}
result = sum + result;
i--;
j--;
}
if (carry === 1) {
result = '1' + result;
}
return result;
}