给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
示例1:
输入: a = “11”, b = “1” 输出: “100”
示例2:
输入: a = “1010”, b = “1011” 输出: “10101”
//满二进一
var addBinary = function(a, b) {
let sum = 0 //保留上一次位数相加后是否进一
let result = ""
for(let i = a.length -1, j = b.length-1; i >= 0 || j >= 0; i--, j--){
let count = sum //取sum的值,与本次遍历的两数相加
count += a[i] > 0 ? parseInt(a[i]) : 0
count += b[j] > 0 ? parseInt(b[j]) : 0
//count的值只可能为 0、1、2、3
result += count % 2
sum = Math.floor(count / 2) // count >= 2 时会进一
}
result += sum == 1 ? sum : "" //最后要检查sum是否为1,为1则表示还需要进位
return result.split("").reverse().join("") //反转,因为是从字符串末端开始遍历
};