Appearance
67. 二进制求和
原题链接:LeetCode 67. 二进制求和
题目描述
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
示例 1:
**输入:**a = "11", b = "1" 输出:"100"
示例 2:
**输入:**a = "1010", b = "1011" 输出:"10101"
提示:
1 <= a.length, b.length <= 104
- `a` 和 `b` 仅由字符 `'0'` 或 `'1'` 组成
- 字符串如果不是 `"0"` ,就不含前导零
难度: Easy
题解代码
javascript
/**
* @param {string} a
* @param {string} b
* @return {string}
*/
var addBinary = function(a, b) {
// 没有超过安全数的情况下可以这样用
// return (parseInt(a, 2) + parseInt(b, 2)).toString(2)
var res = [];
var n1 = a.length;
var n2 = b.length;
var a = a.split('');
var b = b.split('');
var carry = 0;
if (n1 < n2) {
for (var i = 0; i < n2 - n1; ++i) {
a.unshift(0);
}
}
if (n1 > n2) {
for (var i = 0; i < n1 - n2; ++i) {
b.unshift(0);
}
}
for (var i = Math.max(n1, n2) - 1; i >= 0; i--) {
var sum = Number(a[i]) + Number(b[i]) + carry;
res.unshift(sum % 2);
carry = Math.floor(sum / 2);
}
if (carry) {
res.unshift(1);
}
return res.join('')
};