这道题我的解决思路是先将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]) - 2arr[j - 1] = Number(arr[j - 1]) + 1}}if (Number(arr[0]) >1) {arr[0] = Number(arr[0]) - 2arr.unshift(1)}
最后将arr拼接成字符串之后返回
return arr.join('')
下面附上完整代码
/*** @param {string} a* @param {string} b* @return {string}*/
var addBinary = function (a, b) {let lena = a.lengthlet lenb = b.lengthlet 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]) - 2arr[j - 1] = Number(arr[j - 1]) + 1}}if (Number(arr[0]) >1) {arr[0] = Number(arr[0]) - 2arr.unshift(1)}return arr.join('')
};