> For the complete documentation index, see [llms.txt](https://a.b.cr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://a.b.cr/dictionary/algorithm/diary/2022/07/2022-07-01.md).

# 2022-07-01

## [67. Add Binary](https://leetcode.com/problems/add-binary/)

### Description

Given two binary strings `a` and `b`, return *their sum as a binary string*.

**Example 1:**

```
Input: a = "11", b = "1"
Output: "100"
```

**Example 2:**

```
Input: a = "1010", b = "1011"
Output: "10101"
```

**Constraints:**

* `1 <= a.length, b.length <= 10^4`
* `a` and `b` consist only of `'0'` or `'1'` characters.
* Each string does not contain leading zeros except for the zero itself.

### Solution

#### Approach #0

```go
func addBinary(a string, b string) (ans string) {
    lenA, lenB := len(a), len(b)
    c := max(lenA, lenB)
    t := 0
    for i := 0; i < c; i++ {
        if i < lenA {
            t += int(a[lenA-i-1] - '0')
        }
        if i < lenB {
            t += int(b[lenB-i-1] - '0')
        }
        ans = strconv.Itoa(t%2) + ans
        t /= 2
    }
    if t > 0 {
        ans = "1" + ans
    }
    return
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}
```
