0x00:前言
- 给你两个二进制字符串,返回它们的和(用二进制表示)
- 输入为 非空 字符串且只包含数字 1 和 0
- Sample Input
a = "0", b = "0"
a = "11", b = "1"
a = "1010", b = "1011"- Sample Output
"0"
"100"
"10101"- 提示:
- 每个字符串仅由字符 '0' 或 '1' 组成。
- 1 <= a.length, b.length <= 10^4
- 字符串如果不是 "0" ,就都不含前导零。
- 来源:力扣(LeetCode)
0x01:思路
- 开局先检查a、b字符串的长度,并让a串始终都是最长的串(即a串长度始终大于b串);
- 从字符串末尾开始相加,相加结果大于等于2则需进位;
- 若长短串,则将长串剩余部分给他接上;
- 最后无论flag是否为0,都将把flag写进结果串首位;
- 检查结果串的首位字符是否为0,如果是则从第一个非零字符开始返回,否则直接返回;
0x02:代码
package main
import (
"fmt"
)
func main() {
fmt.Println(addBinary("0","0"))
fmt.Println(addBinary("11","1"))
fmt.Println(addBinary("1010","1011"))
}
func addBinary(a, b string) string {
sum := 0
flag:= 0
lenA := len(a)
lenB := len(b)
if lenA < lenB{
lenA,lenB = lenB,lenA
a,b = b,a
}
result := make([]byte , lenA + 1)
for lenB > 0 {
lenA --
lenB --
sum = int(a[lenA] - '0') + int(b[lenB] - '0') + flag
flag = sum / 2
sum = sum % 2
result[lenA + 1] = byte(sum + '0')
}
for lenA > 0 {
lenA --
sum = int(a[lenA] - '0') + flag
flag = sum / 2
sum = sum % 2
result[lenA + 1] = byte(sum + '0')
}
result[0] = byte(flag + '0')
for lenA < len(result)-1 {
if result[lenA] == '0' {
lenA++
} else {
break
}
}
return string(result[lenA:])
}0x02:运行结果

2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
额啊啊啊啊可以吧手机端的字体颜色调黑一点吗,看不清楚啊(´இ皿இ`)