前言
趁刚刚发一篇的热度,再搞一篇。
正文
问题来源
本问题来自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是不可变的
结语
不要懒,多看多写。