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

输入为 非空 字符串且只包含数字 1 和 0。

示例 1:

输入: a = "11", b = "1"
输出: "100"

示例 2:

输入: a = "1010", b = "1011"
输出: "10101"

 
提示:

每个字符串仅由字符 '0' 或 '1' 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 "0" ,就都不含前导零。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-binary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


学到了一个新的ES6 字符串扩展方法
padStart(),padEnd() 用来补全字符串

'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'

'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'

/**
 * @param {string} a
 * @param {string} b
 * @return {string}
 */
var addBinary = function(a, b) {
    //获取最大的字符串长度  判断是否进位的变量 
    let length = Math.max(a.length, b.length),
        flag = 0,sum = 0,str = "";
    //根据最大长度用`"0"`补全字符串
    a = a.padStart(length, '0');
    b = b.padStart(length, '0')
    for (let i = length - 1; i >= 0; i--) {
        //计算同位置数字加flag的值
        sum = (parseInt(a[i]) + parseInt(b[i]) + flag);
        //计算flag 的值 
        flag = parseInt(sum / 2);
        //sum % 2 拼接字符串
        str = sum % 2 + str;
    }
    //如果循环结束 flag 存在的话拼接到str前面
    return flag ? str = flag + str : str;
};

leetcode 那个内存消耗无论我用什么方法都是超过11.11%
别人的代码也不行,很迷。