LC.67二进制求和:
- 思路很简单,字符串a,b对应位的字符相加和为sum,进位carry = sum / 2,对应位结果为sum % 2,并把结果添加字符串ans的后面,最后别忘了最后一位如果carry不为0那么需要添1。由于计算是从右往左而字符串添加是从左往右,所以ans需要进行反转.
```func addBinary(a string, b string) string {
res := ""
sum := 0
carry := 0
lenA := len(a)
lenB := len(b)
var lmin int
var x = 1
x++
if lenA < lenB {
lmin = lenA
}else {
lmin = lenB
}
for i := 0;i < lmin;i++ {
sum = int(a[lenA - 1 - i] - '0' + b[lenB - 1 - i] - '0') + carry
carry = sum / 2
sum = sum % 2
res += fmt.Sprint(sum)
}
for i := lmin;i < lenA;i++ {
sum = int(a[lenA - 1 - i] - '0') + carry
carry = sum / 2
sum = sum % 2
res += fmt.Sprint(sum)
}
for i := lmin;i < lenB;i++ {
sum = int(b[lenB - 1 - i] - '0') + carry
carry = sum / 2
sum = sum % 2
res += fmt.Sprint(sum)
}
if carry > 0 {
res += "1"
}
ans := ""
var length int
length = len(res)
for i := length - 1;i >= 0;i-- {
ans += fmt.Sprint(res[i] - '0')
}
return ans
}
- 第一次用go刷题,我的第一感受是怎么没有三目运算符!还要写ifelse,好不习惯。。。然后go竟然对大括号的位置很敏感,我个人习惯是换行后括号,没想到这竟然会报错,害,我的强迫症要被go治好了。