给出两个用字符串表示的二进制数,返回他们的和(也用字符串表示)
例如:
a ="11"
b ="1"
返回"100".
思路:字符串按位转化为数字,然后从低位开始,求出结果根据二进制判断是否进1,然后结果依次拼接。注意两个字符串的长短差异。
package main
import (
"strconv"
"strings"
)
/**
*
* @param a string字符串
* @param b string字符串
* @return string字符串
*/
func addBinary( a string , b string ) string {
// write code here
aList := strings.Split(a, "")
bList := strings.Split(b, "")
aLen := len(aList)
bLen := len(bList)
var longList []string
var shortList []string
var longLen int
var shortLen int
if aLen >= bLen {
longList = aList
shortList = bList
longLen = aLen
shortLen = bLen
} else {
longList = bList
shortList = aList
longLen = bLen
shortLen = aLen
}
flag := 0
for i, j := longLen-1, shortLen-1; i >= 0; i, j = i-1, j-1 {
var shortNum int
longNum, _ := strconv.Atoi(longList[i])
if j >= 0 {
shortNum, _ = strconv.Atoi(shortList[j])
} else {
shortNum = 0
}
if (longNum+shortNum+flag)%2 == 0 {
longList[i] = "0"
} else {
longList[i] = "1"
}
if (longNum+shortNum+flag)/2 == 1 {
flag = 1
} else {
flag = 0
}
}
if flag == 1 {
longList = append([]string{"1"}, longList...)
}
return strings.Join(longList, "")
}