力扣,二进制求和,js解法

167 阅读1分钟

题目:给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 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类型

结果:

image.png

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('')
};

结果:

image.png