问题
给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。
输入: a = "11", b = "1"
输出: "100"
输入: a = "1010", b = "1011"
输出: "10101"
分析
动手计算总结规律。 1)首先,需要将短的一个在前面进行补0,使两个数组长度相同。 2)从后往前逐位相加。其中,返回值头部为(sum+jw)%2,进位为(sum+jw)/2。 3)最后,当jw不为0时,返回值头部要追加进位。
代码
var addBinary = function(a, b) {
var as = a.split('')
var bs = b.split('')
var al = as.length
var bl = bs.length
if(al < bl){
for(var i=1;i<= bl-al;i++){ as.unshift('0')}
}else{
for(var i=1;i<= al-bl;i++){ bs.unshift('0')}
}
var sum = 0
var jw = 0
var res = ''
for(var i=as.length-1;i>=0;i--){
sum = as[i]*1+bs[i]*1
res = (sum+jw)%2 + res
jw = Math.floor((sum+jw)/2)
}
if(jw){res = jw + res}
return res
};
|