题目:
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
| 12
 
 | 输入: a = "11", b = "1"输出: "100"
 
 | 
示例 2:
| 12
 
 | 输入: a = "1010", b = "1011"输出: "10101"
 
 | 
解法:
一开始的思路是:将二进制转成十进制,相加之后再将把结果转化为二进制
但是
| 12
 3
 
 | console.log(parseInt("10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101"))
 
 
 | 
遇到这种科学计数法的值, 无法轻易转回二进制
所以还是老老实实的使用对应位数相加的方法来解题:
| 12
 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 通过所有单元测试