1. 题目描述
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
2. 示例
示例1
输入: a = “11”, b = “1”
输出: “100”
示例2
输入: a = “1010”, b = “1011”
输出: “10101”
3.代码实现
1)方法1
function addBinary(a, b){
return (parseInt(a,2) + parseInt(b,2)).toString(2)
}
说明:这种方法不适用于位数特别多的数相加,位数过长就会失真。
2)方法2
function addBinary(a, b) {
let sum = 0
let carry = 0 // 进位
let result = []
let numA = a.toString().split('').reverse() // 翻转a b
let numB = b.toString().split('').reverse()
let length1 = numA.length < numB.length ? numA.length : numB.length
for (let i = 0; i < length1; i++) {
result.push(numA[i] ^ numB[i] ^ carry)
if (numA[i] * 1 + numB[i] * 1 + carry > 1) { // 控制进位的值
carry = 1
} else {
carry = 0
}
}
if (numA.length === numB.length) { // 如果两个数相等,最后加上进位即可。
if (carry === 1) {
result.push(carry)
}
} else { // 如果两个数不等,大数的剩余位需要继续计算
let maxNum = numA.length > numB.length ? numA : numB
for (let j = length1; j < maxNum.length; j++) {
result.push(maxNum[j] ^ carry)
if (maxNum[j] * 1 === 1 && carry === 1) { // 控制进位的值
carry = 1
} else {
carry = 0
}
}
if (carry === 1) {
result.push(carry)
}
}
sum = result.reverse().join('')
return sum
}