1. 题目描述

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例 1:

  1. 输入: a = "11", b = "1"
  2. 输出: "100"

示例 2:

  1. 输入: a = "1010", b = "1011"
  2. 输出: "10101"

提示:

  • 每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。
  • 1 <= a.length, b.length <= 10
  • 字符串如果不是 “0” ,就都不含前导零。

    2. 实现思路

    这个使用最直接的方法来解决,直接对应位进行相加操作,需要对进位数进行判断,然后给出不同的操作。最后需要注意,如果还有进位,就在结果的前面加个1。

    3. 代码实现

    1. /**
    2. * @param {string} a
    3. * @param {string} b
    4. * @return {string}
    5. */
    6. var addBinary = function(a, b) {
    7. // 首先将两个树的位数补齐
    8. while(a.length > b.length) b = "0" + b
    9. while(a.length < b.length) a = "0" + a
    10. let res = new Array(a.length)
    11. let sum = 0
    12. let temp = 0 // 进位
    13. for(let i = a.length - 1; i >= 0; i --){
    14. sum = Number(a[i]) + Number(b[i]) + temp
    15. if(sum >= 2){
    16. res[i] = sum - 2
    17. temp = 1
    18. }else{
    19. res[i] = sum
    20. temp = 0
    21. }
    22. }
    23. if(temp) res.unshift(1)
    24. return res.join("")
    25. };

    4. 提交结果

    67. 二进制求和 - 图1