二进制字符串的加法,和十进制的大整数加法很相似。
只不过一个是逢2进1,另一个是逢10进1。
所以,实现起来也比较简单。
不过,一般要考虑,如果字符串以0开头的情况,截取掉。
我的实现,没有考虑这点。
/**
* @param {string} a
* @param {string} b
* @return {string}
*/
var addBinary = function(a, b) {
var res = [];
//是否进位
var addOne = 0;
//字符串对齐
while(a.length < b.length){
a = "0" + a;
}
while(b.length < a.length){
b = "0" + b;
}
//从低位到高位,依次相加
for(var i=a.length-1;i>=0;i--){
var curA = +a.charAt(i);
var curB = +b.charAt(i);
var sum = curA + curB + addOne;
//逢2进位
if(sum >= 2){
res[i] = sum - 2;
addOne = 1;
}
else{
res[i] = sum;
addOne = 0;
}
}
if(addOne > 0){
res.unshift(1);
}
//一次性拼接
return res.join("");
};