leetcode67 二进制求和

leetcode67 Add Binary

Posted by BY on October 29, 2018

前言

趁刚刚发一篇的热度,再搞一篇。

正文

问题来源

本问题来自leetcode上的67题。

问题描述

给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。

示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"

分析:

本人写的非递归Go代码如下:

func addBinary(a string, b string) string {
        al := len(a)
        bl := len(b)
        var flag byte = 0
        if al < bl {
                al,bl = bl,al 
                a,b = b,a
        }       
        ret := make([]byte, al)
        al,bl=al-1,bl-1
        for (al>=0)&&(bl>=0) {
                ba := byte(a[al])
                bb := byte(b[bl])
                sum := flag + ba +bb - 48
                if sum > 49 {
                        ret[al] = sum-2 
                        flag = 1
                } else {
                        ret[al] = sum
                        flag = 0
                }       
                al--    
                bl--    
        } 
        for al>=0 { 
                ba := byte(a[al])
                sum := flag + ba
                if sum > 49 {
                        ret[al] = sum-2 
                        flag = 1
                } else {
                        ret[al] = sum
                        flag = 0
                }       
                al--    
        } 
        if flag == 1 {
                return "1"+string(ret)
        }       
        return string(ret)
}

总结:

go语言的string是不可变的

结语

不要懒,多看多写。