sailei1/algorithm

67 二进制求和

Closed this issue · 0 comments

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 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(''); // 数组反推 返回结果
};