这道题我的解决思路是先将a和b的长度保持一致以方便后续按位加减
let lena = a.length
let lenb = b.length
if (lena !== lenb) {
if (lena > lenb) {
for (let i = 0; i <lena-lenb; i++) {
b = '0' + b
}
} else {
for (let i = 0; i < lenb-lena; i++) {
a = '0' + a
}
}
}
下一步直接进行按位加减,做这一步时无需考虑是否需要进位
let c = ''
for (let i = 0; i < a.length; i++) {
c = c + Number(Number(a[i]) + Number(b[i]))
}
最后通过将c转换为数组来做二进制进位
arr = c.split('')
for (let j = arr.length - 1; j > 0; j--) {
if (Number(arr[j]) >= 2) {
arr[j] = Number(arr[j]) - 2
arr[j - 1] = Number(arr[j - 1]) + 1
}
}
if (Number(arr[0]) >1) {
arr[0] = Number(arr[0]) - 2
arr.unshift(1)
}
最后将arr拼接成字符串之后返回
return arr.join('')
下面附上完整代码
/**
* @param {string} a
* @param {string} b
* @return {string}
*/
var addBinary = function (a, b) {
let lena = a.length
let lenb = b.length
let c = ''
let arr = []
if (lena !== lenb) {
if (lena > lenb) {
for (let i = 0; i <lena-lenb; i++) {
b = '0' + b
}
} else {
for (let i = 0; i < lenb-lena; i++) {
a = '0' + a
}
}
}
for (let i = 0; i < a.length; i++) {
c = c + Number(Number(a[i]) + Number(b[i]))
}
arr = c.split('')
for (let j = arr.length - 1; j > 0; j--) {
if (Number(arr[j]) >= 2) {
arr[j] = Number(arr[j]) - 2
arr[j - 1] = Number(arr[j - 1]) + 1
}
}
if (Number(arr[0]) >1) {
arr[0] = Number(arr[0]) - 2
arr.unshift(1)
}
return arr.join('')
};