内容
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
思路
大数相加的套路,从最右边的位置开始加,每次有进位都记下来,下一次的时候加上。
代码
/**
* @param {string} a
* @param {string} b
* @return {string}
*/
var addBinary = function (a, b) {
a = a.split('');
b = b.split('');
if (a.length > b.length) {
b.splice(0, 0, ...new Array(a.length - b.length).fill('0'));
} else {
a.splice(0, 0, ...new Array(b.length - a.length).fill('0'));
}
var len = a.length;
var needP = false;
var result = [];
for (var i = len - 1; i >= 0; i--) {
var sum = parseInt(a[i]) + parseInt(b[i]) + (needP ? 1 : 0);
needP = false;
if (sum >= 2) {
result.splice(0, 0, (sum % 2).toString());
needP = true;
} else {
result.splice(0, 0, sum.toString());
}
}
if (needP) {
result.splice(0, 0, '1');
}
return result.join('');
};