题目
给定两个二进制字符串 a,b
。以字符串的形式返回两数相加之和。二进制高位在前。
解析
解法很简单,主要考虑如何和语言挂钩。
golang 字符串不能修改,所以需要新建一个字符串用于返回。
加法运算有可能溢出,所以新建字符串应该取 max(a,b) + 1,然后根据最后的结果决定是否保留最高为。
伪代码
代码
func addBinary(a string, b string) string {
la := len(a)
lb := len(b)
lr := la
if lb > la {
lr = lb
}
rst := make([]byte, lr+1)
la--
lb--
var flag uint8
for la>=0 || lb>=0 {
var tmp uint8
if la >=0 {
tmp+=a[la]-'0'
la--
}
if lb>=0 {
tmp+=b[lb]-'0'
lb--
}
tmp+=flag
flag=tmp/2
rst[lr] = byte('0' + tmp%2)
lr--
}
if flag == 1 {
rst[lr] = '1'
} else {
rst = rst[1:]
}
return string(rst)
}
image.png
网友评论