题目:
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
解法:
var covertMap = map[string]int{
"1":1,
"0":0,
}
func addBinary(a string, b string) string {
idxa, idxb := len(a) - 1, len(b) - 1
carry := 0
ans := ""
for idxa >= 0 && idxb >= 0 {
cur := covertMap[string(a[idxa])] + covertMap[string(b[idxb])] + carry
if cur <= 1 {
ans = fmt.Sprintf("%d", cur) + ans
// carry要置0
carry = 0
} else {
// cur可能取值0,1,2,3
ans = fmt.Sprintf("%d", cur - 2) + ans
carry = 1
}
idxa --
idxb --
}
for idxa >= 0 {
cur := covertMap[string(a[idxa])] + carry
if cur <= 1 {
ans = fmt.Sprintf("%d", cur) + ans
carry = 0
} else {
ans = fmt.Sprintf("%d", cur - 2) + ans
carry = 1
}
idxa --
}
for idxb >= 0 {
cur := covertMap[string(b[idxb])] + carry
if cur <= 1 {
ans = fmt.Sprintf("%d", cur) + ans
carry = 0
} else {
ans = fmt.Sprintf("%d", cur - 2) + ans
carry = 1
}
idxb --
}
if carry == 1 {
ans = "1" + ans
}
return ans
}