- 
                Notifications
    
You must be signed in to change notification settings  - Fork 0
 
Closed
Description
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 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(''); // 数组反推 返回结果
};
Metadata
Metadata
Assignees
Labels
No labels