解题思路
- 首先需要将字符串全部转换为数字烈性的数组 number[]
- 在相加的过程中无非需要关注三个元素,acc 是否进位 sum 相加的结果
- 在每一轮循环后需要注意 acc 需要更新,如果 sum 大于 1 就 acc = 1 否则设置为 0
- 最后将相加后的sum,推入到 sums的第一位即进行 sums.unshift(sum)操作
- 循环完成后,如果 acc进位不为 0,需要添加到首位
- 直接返回 sums.join('') 即可
代码
var addBinary = function (a, b) {
let acc = 0
let sum = 0
let sums = []
const aArr = a.split('').map(str => +str)
const bArr = b.split('').map(str => +str)
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('')
};