分享
二进制求和
CancerTiN · · 6821 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 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%的用户
二进制加法、进位,在越界的边缘疯狂试探~
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信6821 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 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%的用户
二进制加法、进位,在越界的边缘疯狂试探~