给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
Golang解决:
package main
import (
"fmt"
)
func addBinary(a string, b string) string {
length := len(b)
if len(a) > len(b) {
length = len(a)
}
r := make([]byte, length)
var extra byte
for i := 0; i < length; i++ {
var dib byte
ai, bi := len(a)-1-i, len(b)-1-i
if ai >= 0 && bi >= 0 {
dib = a[ai] - '0' + b[bi] - '0'
} else if ai >= 0 {
dib = a[ai] - '0'
} else if bi >= 0 {
dib = b[bi] - '0'
}
dib += extra
if dib > 1 {
extra = 1
} else {
extra = 0
}
r[length-1-i] = dib%2 + '0'
}
if extra == 1 {
r = append([]byte{'1'}, r...)
}
return string(r)
}
func main() {
for _, array := range [][2]string{{"11", "1"}, {"1010", "1011"}} {
a := array[0]
b := array[1]
r := addBinary(a, b)
fmt.Println(a, b, r)
}
}
标准输出:
11 1 100
1010 1011 10101
执行结果:(通过)
执行用时 :0 ms, 在所有 Go 提交中击败了100.00% 的用户
内存消耗 :2.2 MB, 在所有 Go 提交中击败了94.30%的用户
二进制加法、进位,在越界的边缘疯狂试探~
有疑问加站长微信联系(非本文作者)