二进制求和

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

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

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

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