题目
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
输入: a = "1010", b = "1011" 输出: "10101"
题解
首先我们先声明七个变量,acc变量和sum变量我们先让它的值默认是0,sums变量是一个空数组,aArr变量的值是将出参a使用split方法进行转换成数组,在使用map方法循环每一个数,在循环中使用Number方法转换为数字类型,这样就是一个值全是数字的数组,bArr变量也是如此,不过相对应的是出参b进行这么操作,addA变量的值是使用pop方法从aArr数组中获取到的末尾值,addB变量的值是使用pop方法从bArr数组中获取到的末尾值,在使用while循环进行循环,循环条件为当前addB变量的值或addA变量的值都是number类型,在循环中我们使用if语句进行判断,如果当前addA变量和addB变量的值都与null不相等,我们则将addA变量和addB变量的值和acc变量的值进行相加赋值给sum变量,如果不满足此条件则继续判断当前addA变量是否与null不相等,如果是则将addA变量的值和acc变量的值进行相加赋值给sum变量,如还不满足我们就进入最后一步将当前addB变量的值和acc变量的值进行相加赋值给sum变量,然后在使用if语句进行判断,判断当前sum变量是否大于1,如果满足则将sum的值与2相余,将余下来的值赋值给sum变量,同时也将acc变量赋值为1,如果不满足则将acc变量赋值为0,在使用unshift将sum的值插入到sums数组的最前面,在对aArr数组使用pop方法获取末尾值并赋值给addA变量,addB变量也如此一般,不过是对bArr数组进行操作,然后等待循环结束后,我们在进行判断当前acc变量是否大于0,如果大于0则使用unshift方法将acc变量插入到sums数组中,最后我们对sums数组使用join方法使其转换成字符串,直接返回出去即可
/** * @param {string} a * @param {string} b * @return {string} */ var addBinary = function (a, b) { let acc = 0 let sum = 0 let sums = [] let aArr = a.split('').map(r => Number(r)) let bArr = b.split('').map(r => Number(r)) let addA = aArr.pop() let addB = bArr.pop() while (typeof addA === 'number' || typeof addB === 'number') { if (addA != null && addB != null) { sum = addA + addB + acc } else if (addA != null) { sum = addA + acc } else { sum = addB + acc } if (sum > 1) { sum = sum % 2 acc = 1 } else { acc = 0 } sums.unshift(sum) addA = aArr.pop() addB = bArr.pop() } if (acc > 0) { sums.unshift(acc) } return sums.join('') };