mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-05 16:36:41 +08:00
添加 18 题
This commit is contained in:
76
leetcode/0067.Add-Binary/README.md
Normal file
76
leetcode/0067.Add-Binary/README.md
Normal file
@ -0,0 +1,76 @@
|
||||
# [67. Add Binary](https://leetcode.com/problems/add-binary/)
|
||||
|
||||
|
||||
## 题目
|
||||
|
||||
Given two binary strings, return their sum (also a binary string).
|
||||
|
||||
The input strings are both **non-empty** and contains only characters `1` or `0`.
|
||||
|
||||
**Example 1**:
|
||||
|
||||
```
|
||||
Input: a = "11", b = "1"
|
||||
Output: "100"
|
||||
```
|
||||
|
||||
**Example 2**:
|
||||
|
||||
```
|
||||
Input: a = "1010", b = "1011"
|
||||
Output: "10101"
|
||||
```
|
||||
|
||||
## 题目大意
|
||||
|
||||
给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。
|
||||
|
||||
## 解题思路
|
||||
|
||||
- 要求输出 2 个二进制数的和,结果也用二进制表示。
|
||||
- 简单题。按照二进制的加法规则做加法即可。
|
||||
|
||||
## 代码
|
||||
|
||||
```go
|
||||
|
||||
package leetcode
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func addBinary(a string, b string) string {
|
||||
if len(b) > len(a) {
|
||||
a, b = b, a
|
||||
}
|
||||
|
||||
res := make([]string, len(a)+1)
|
||||
i, j, k, c := len(a)-1, len(b)-1, len(a), 0
|
||||
for i >= 0 && j >= 0 {
|
||||
ai, _ := strconv.Atoi(string(a[i]))
|
||||
bj, _ := strconv.Atoi(string(b[j]))
|
||||
res[k] = strconv.Itoa((ai + bj + c) % 2)
|
||||
c = (ai + bj + c) / 2
|
||||
i--
|
||||
j--
|
||||
k--
|
||||
}
|
||||
|
||||
for i >= 0 {
|
||||
ai, _ := strconv.Atoi(string(a[i]))
|
||||
res[k] = strconv.Itoa((ai + c) % 2)
|
||||
c = (ai + c) / 2
|
||||
i--
|
||||
k--
|
||||
}
|
||||
|
||||
if c > 0 {
|
||||
res[k] = strconv.Itoa(c)
|
||||
}
|
||||
|
||||
return strings.Join(res, "")
|
||||
}
|
||||
|
||||
```
|
Reference in New Issue
Block a user