67. 二进制求和

题目描述

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 1 和 0。

示例:

输入: a = "11", b = "1"
输出: "100"

思路

1.可以将两个字符串从末尾开始相加,中途使用一个标识位表示进位即可。
2.由于两个字符串的长度可能不同,所以我们应该在循环结束后,再将长的那个字符串进一步与结果进行相加。

Java代码实现

    public String addBinary(String a, String b) {
        int len1 = a.length()-1;
        int len2 = b.length()-1;
        StringBuffer stringBuffer = new StringBuffer();
        int ans = 0;
        while(len1>=0 && len2>=0){
            int cur = Integer.parseInt(String.valueOf(a.charAt(len1--)))+Integer.parseInt(String.valueOf(b.charAt(len2--)))+ans;
            ans = cur/2;
            stringBuffer.insert(0,cur%2);
        }

        while(len1>=0){
            int cur = Integer.parseInt(String.valueOf(a.charAt(len1--)))+ans;
            ans = cur/2;
            stringBuffer.insert(0,cur%2);
        }

        while(len2>=0){
            int cur = Integer.parseInt(String.valueOf(b.charAt(len2--)))+ans;
            ans = cur/2;
            stringBuffer.insert(0,cur%2);
        }

        if(ans>0)
            stringBuffer.insert(0,1);

        return stringBuffer.toString();
    }

Golang代码实现

func addBinary(a string, b string) string {
    res := ""

    l1 := len(a)-1
    l2 := len(b)-1

    ans := 0

    for l1 >= 0 || l2 >=0 {
        num1 := 0
        num2 := 0
        if l1 >= 0 && l2 >= 0{
            num1,_ = strconv.Atoi(a[l1:l1+1])
            num2,_ = strconv.Atoi(b[l2:l2+1])
            l1--
            l2--
        }else if l1 >= 0 && l2 < 0{
            num1,_ = strconv.Atoi(a[l1:l1+1])
            l1--
        }else if l1 < 0 && l2 >= 0{
            num2,_ = strconv.Atoi(b[l2:l2+1])
            l2--
        }
        res = strconv.Itoa((num1+num2+ans)%2) + res
        ans = (num1+num2+ans)/2
    }

    if ans == 1{
        res = "1" + res
    }

    return res
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务