Go学习笔记-二进制求和

80 阅读1分钟

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治好了。