67. 二进制求和

63 阅读1分钟

题目:
给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 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
}