leetcode 67. Add Binary (二进制加法)

文章目录


Given two binary strings, return their sum (also a binary string).

The input strings are both non-empty and contains only characters 1 or 0.

Example 1:

Input: a = “11”, b = “1”
Output: “100”
Example 2:

Input: a = “1010”, b = “1011”
Output: “10101”

Constraints:

Each string consists only of ‘0’ or ‘1’ characters.
1 <= a.length, b.length <= 10^4
Each string is either “0” or doesn’t contain any leading zero.

C++

class Solution {
public:
    string addBinary(string a, string b) {
        int len1=a.length();
        int len2=b.length();
        int n=max(len1,len2);
        string r(n,'0');
        int up=0;
        for(int i=0;i<n;i++){
            int tmp=up;
            if(i<len1)tmp+=a[len1-i-1]-'0';
            if(i<len2)tmp+=b[len2-i-1]-'0';
            r[n-i-1]='0'+tmp%2;
            up=tmp/2;
        }
        if(up)r.insert(0,"1");
        return r;
    }
};

Java

class Solution {
    public String addBinary(String a, String b) {
        int len1=a.length();
        int len2=b.length();
        int n=Math.max(len1,len2);
        int up=0;
        StringBuilder r=new StringBuilder();
        for(int i=0;i<n;i++){
            int tmp=up;
            if(i<len1)tmp+=a.charAt(len1-1-i)-'0';
            if(i<len2)tmp+=b.charAt(len2-1-i)-'0';
            r.insert(0,tmp%2);
            up=tmp/2;
        }
        if(up==1)r.insert(0,1);
        return r.toString();
    }
}

Python

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        len1,len2=len(a),len(b)
        n=max(len1,len2)
        up=0
        r=""
        for i in range(n):
            tmp=up
            if i<len1:
                tmp+=int(a[len1-1-i])
            if i<len2:
                tmp+=int(b[len2-1-i])
            r=str(tmp%2)+r
            up=tmp//2
        if up==1:
            return "1"+r
        return r

Go

func addBinary(a string, b string) string {
    len1,len2:=len(a),len(b)
    n:=len2
    if len1>len2 {
        n=len1
    }
    r:=make([]byte, n+1)
    up:=0
    for i:=0;i<n;i++ {
        tmp:=up
        if i<len1 {
            tmp+=int(a[len1-1-i]-'0')
        }
        if i<len2 {
            tmp+=int(b[len2-1-i]-'0')
        }
        r[n-i]=byte(tmp%2+'0')
        up=tmp/2
    }
    if up==1 {
        r[0]='1'
        return string(r)
    }
    return string(r[1:])
}
posted @ 2020-08-20 09:13  winechord  阅读(143)  评论(0编辑  收藏  举报