题目描述
给定两个二进制字符串,两个相加返回结果
输入: a = “1010”, b = “1011”
输出: “10101”
解决方案
将指针指向字符串最后一位,两两相加再加上仅为,注意处理进位,两字符串的当前值为1时
* 当前进位为0时,那么1 + 1 + 0 = 2 ,二进制要进位,当前值应该为2 % 2 = 0。进位变为1
* 当前仅为为1时,那么1 + 1 + 1 = 3 ,二进制要进位,当前值应为 3 % 2 = 1。 进位为1
* 将当前值放到数组头部
i = 0 | i = 1 | i = 2 | i = 3 | |
---|---|---|---|---|
a数组 | 1 | 1 | 1 | |
b数组 | 1 | 0 | 1 | |
result | 1 | 0 | 0 | 0 |
代码
var addBinary = function(a, b) {
let aLength = a.length;
let bLength = b.length;
let i = aLength - 1;
let j = bLength - 1;
let result = [];
let add = 0; // 进位
while(i >= 0 || j >= 0) {
let atemp = i >= 0 ? a[i] * 1 : 0; // 对i判定大于0为了防止数组溢出
let btemp = j >= 0 ? b[j] * 1 : 0;
let current = atemp + btemp + add;
if(current >= 2) {
add = Math.floor(current / 2);
} else {
add = 0;
}
result.unshift(current % 2); // 将当前值放入到数组头
i--;
j--;
}
// 退出循环后如果数组为1表示有进位,那也要加到数组头
if(add != 0) {
result.unshift(add)
}
return result.join("")
};