0067.二进制求和

方法一:模拟加法

时间复杂度 $O(max(len(a), len(b)))$,空间复杂度 $O(1)$。

func addBinary(a string, b string) string {
	ans, pa, pb := "", len(a)-1, len(b)-1
	for mod := 0; pa >= 0 || pb >= 0 || mod != 0; {
		x, y := 0, 0
		if pa >= 0 {
			x, pa = int(a[pa]-'0'), pa-1
		}
		if pb >= 0 {
			y, pb = int(b[pb]-'0'), pb-1
		}
		ans = fmt.Sprintf("%d", (x+y+mod)%2) + ans
		mod = (x + y + mod) / 2
	}
	return ans
}