White's Studio.

Leetcode-二进制求和

2018/07/14 Share

题目:

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 10

示例 1:

1
2
输入: a = "11", b = "1"
输出: "100"

示例 2:

1
2
输入: a = "1010", b = "1011"
输出: "10101"

解法:

一开始的思路是:将二进制转成十进制,相加之后再将把结果转化为二进制

但是

1
2
3
console.log(parseInt("10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101"))

// 1.010000010010011e+94

遇到这种科学计数法的值, 无法轻易转回二进制

所以还是老老实实的使用对应位数相加的方法来解题:

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
/**
* @param {string} a
* @param {string} b
* @return {string}
*/
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 通过所有单元测试

CATALOG