题目:给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
这个题目有两种思路
1、转化为十进制相加,再转换回二进制输出
源码:
var addBinary = function(a, b) {
let first = BigInt('0b'+a)
let second = BigInt('0b'+b)
return (first+second).toString(2)
};
在这个方法中,要考虑到超出NUmber类型的最大安全范围的情况,超出最大安全范围会导致运算不准确,所以我们需要把他转化为BigInt类型,这是在es6中新增的数据类型,目的是为了处理Number类型处理不了的类型。
关于BigInt类型
let a = BigInt('0x10') //表示十六进制创建的BigInt类型
let b = BigInt('0o10') //表示八进制创建的BigInt类型
let c = BigInt('0b10') //表示二进制创建的BigInt类型
结果:
2、通过从后往前循环相加的方法
源码:
var addBinary = function(a, b) {
let first = a.split('')
let second = b.split('')
let result= []
let supData = 0
while(first.length||second.length){
let supFirst = Number(first.pop()) || 0
let supSecond = Number(second.pop()) || 0
let supResult = supFirst+supSecond+supData
result.unshift(supResult%2)
if(supResult>1){
supData = 1
} else {
supData = 0
}
}
supData&&result.unshift(1)
return result.join('')
};
结果: