二进制求和

CancerTiN · · 6726 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

输入为非空字符串且只包含数字 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%的用户 

二进制加法、进位,在越界的边缘疯狂试探~


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:CancerTiN

查看原文:二进制求和

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

6726 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传