题目来源:https://leetcode.com/problems/add-binary/
问题描述
67. Add Binary
Easy
Given two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters 1 or 0.
Example 1:
Input: a = "11", b = "1"
Output: "100"
Example 2:
Input: a = "1010", b = "1011"
Output: "10101"
------------------------------------------------------------
题意
把两个用字符串表示的二进制整数相加,返回结果二进制的字符串表示
------------------------------------------------------------
思路
这是笔者在LeetCode上写的第一个Golang程序,纪念撒花!因工作需要,在学习Go语言,所以最近题目可能都会用Go来写。
加一个布尔型的carry表示进位,另外就是Go的string的所以string[i]是只读的,要用索引的方式修改只能将string转为[]byte. (吐槽一下Go数组的[]居然是放在类型前面的)
------------------------------------------------------------
代码
func addBinary(a string, b string) string {
lenA, lenB := len(a), len(b)
if lenA > lenB {
a, b = b, a
lenA, lenB = lenB, lenA
}
var bytes []byte = []byte(b)
i := 0
carry := false
for i=0; i<lenA; i++ {
chA, chB := a[lenA-1-i], b[lenB-1-i]
if chA == '1' && chB == '1' && !carry {
bytes[lenB-1-i], carry = '0', true
} else if chA == '1' && chB == '0' && !carry {
bytes[lenB-1-i] = '1'
} else if chA == '0' && chB == '1' && carry {
bytes[lenB-1-i] = '0'
} else if chA == '0' && chB == '0' && carry {
bytes[lenB-1-i], carry = '1', false
}
}
for ; i<lenB; i++ {
if b[lenB-1-i] == '1' && carry {
bytes[lenB-1-i] = '0'
} else if b[lenB-1-i] == '0' && carry {
bytes[lenB-1-i], carry = '1', false
}
}
b = string(bytes)
if carry {
b = "1" + b
}
return b
}