67 二进制求和
Closed this issue · 0 comments
sailei1 commented
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
解法:
二进制 1010
1011
-----
竖向相加 2021 逢2 进1
10101
/**
* @param {string} a
* @param {string} b
* @return {string}
*/
// var addBinary = function(a, b) {
// let rs=convert(a)+convert(b);
// return rs.toString(2); //转换2进制
// };
// function convert(str){ return parseInt(str, 2); } //转换十进制
// 有溢出问题
var addBinary = function (a, b) {
let carry = 0;// 进位标记
let res = [];
aindex = a.length - 1;//
bindex = b.length - 1;
while (aindex >= 0 || bindex >= 0) {// a或b还有位可以相加
sum = (+a[aindex] || 0) + (+b[bindex] || 0) + carry;// aindex bindex 长度不一致时 0替补
carry = sum >= 2 ? 1 : 0;//进位数值
res.push(sum % 2);
aindex--;
bindex--;
}
if (carry) {
res.push(1);
}
return res.reverse().join(''); // 数组反推 返回结果
};