Given two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters 1 or 0.
- 2개의 이진수 문자열이 주어지며 이 이진수를 합해서 문자열로 반환
example
Example 1:
Input: a = "11", b = "1"
Output: "100"Example 2:
Input: a = "1010", b = "1011"
Output: "10101"
Constraints:
- Each string consists only of '0' or '1' characters.
- 1 <= a.length, b.length <= 10^4
- Each string is either "0" or doesn't contain any leading zero.
/**
* @param {string} a
* @param {string} b
* @return {string}
*/
var addBinary = function(a, b) {
let result = [];
let carryNum = 0;
while (true) {
let aLastIndex = a.length - 1;
let bLastIndex = b.length - 1;
if (aLastIndex != -1 || bLastIndex != -1) {
let aNum = Number(a[aLastIndex] ? a[aLastIndex] : 0);
let bNum = Number(b[bLastIndex] ? b[bLastIndex] : 0);
if (aNum + bNum + carryNum > 1) {
if (aNum + bNum + carryNum == 2) {
result.unshift(0);
}
if (aNum + bNum + carryNum == 3) {
result.unshift(1);
}
carryNum = 1;
} else {
result.unshift(aNum + bNum + carryNum);
carryNum = 0;
}
}
if (aLastIndex == -1 && bLastIndex == -1) {
if (carryNum == 1) {
result.unshift(carryNum);
}
return result.join('');
}
a = a.substring(0, aLastIndex);
b = b.substring(0, bLastIndex);
}
};
var addBinary = function(a, b) {
// return (parseInt(a, 2) + parseInt(b, 2)).toString(2);
let highNum = 0;
let lowNum = 0;
if (a.length >= b.length) {
highNum = a;
lowNum = b;
} else {
highNum = b;
lowNum = a;
}
let carry = 0;
let resultBinary = [];
let lowNumIndex = lowNum.length - 1;
for (let i = highNum.length - 1; i > -1; i--) {
let sum = 0;
if (lowNumIndex > -1) {
sum = Number(highNum[i]) + Number(lowNum[lowNumIndex]) + Number(carry);
lowNumIndex--;
} else {
sum = Number(highNum[i]) + Number(carry);
}
switch (sum) {
case 0:
resultBinary.unshift(0);
carry = 0;
break;
case 1:
resultBinary.unshift(1);
carry = 0;
break;
case 2:
resultBinary.unshift(0);
carry = 1;
break;
case 3:
resultBinary.unshift(1);
carry = 1;
break;
}
}
if (carry > 0) {
resultBinary.unshift(carry);
}
return resultBinary.join('');
};