题目:
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
1 2
| 输入: a = "11", b = "1" 输出: "100"
|
示例 2:
1 2
| 输入: a = "1010", b = "1011" 输出: "10101"
|
解法:
一开始的思路是:将二进制转成十进制,相加之后再将把结果转化为二进制
但是
1 2 3
| console.log(parseInt("10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101"))
|
遇到这种科学计数法的值, 无法轻易转回二进制
所以还是老老实实的使用对应位数相加的方法来解题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
var addBinary = function(a, b) { let addPosition = 0 if (a === '0' && b === '0') return '0' let array = [] while (a.length || b.length || addPosition) { let temp = Number( a[a.length - 1] || 0)+ Number( b[b.length - 1] || 0) + addPosition if (temp === 0 || temp === 1) { addPosition = 0 } else if ( temp === 2) { temp = 0 addPosition = 1 } else if (temp === 3) { temp = 1 addPosition = 1 } if (a.length) a = a.slice(0, a.length -1) if (b.length) b = b.slice(0, b.length -1) array.unshift(temp) }
return array.join("") };
|
耗时:92ms 通过所有单元测试