持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情
题目
给你两个二进制字符串
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('')
};
坚持努力,无惧未来!