题目
给你两个二进制字符串 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('') };