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:])
}