目录
二进制求和
访问量:1804

一、题目

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

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

示例 1:


输入: a = "11", b = "1"

输出: "100"

示例 2:


输入: a = "1010", b = "1011"

输出: "10101"

 

提示:


每个字符串仅由字符 '0' 或 '1' 组成。

1 <= a.length, b.length <= 10^4

字符串如果不是 "0" ,就都不含前导零。

二、解法

1、解法1

思路:从两个字符串最后开始遍历每一位,然后求和,若大于1,则进位。

func addBinary(a string, b string) string {
    aLen := len(a)
    bLen := len(b)

    rs := ""
    isAddBit := 0
    for i:=0; i< aLen || i< bLen; i++ {
        byteA :=0
        byteB := 0

        if i < aLen && a[aLen-i-1] == '1'{
            byteA = 1
        }

        if i < bLen && b[bLen -i -1] == '1'{
            byteB = 1
        }

        curByte := isAddBit + byteA + byteB
        isAddBit = 0

        if curByte >= 2 {
            curByte = curByte -2
            isAddBit = 1
        }

        if curByte == 1 {
            rs = "1"+rs
        } else {
            rs = "0"+rs
        }
    }

    if isAddBit != 0 {
        rs = "1"+rs
    }

    return rs
}