Given two binary strings a
and b
, return their sum as a binary string.
Example 1:
Input: a = "11", b = "1" Output: "100"
Example 2:
Input: a = "1010", b = "1011" Output: "10101"
Constraints:
1 <= a.length, b.length <= 104
a
andb
consist only of'0'
or'1'
characters.- Each string does not contain leading zeros except for the zero itself.
class Solution:
def addBinary(self, a: str, b: str) -> str:
return bin(int(a, 2) + int(b, 2))[2:]
class Solution {
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int i = a.length() - 1, j = b.length() - 1, carry = 0;
while (i >= 0 || j >= 0 || carry != 0) {
int s = carry + (i >= 0 ? a.charAt(i) - '0' : 0) + (j >= 0 ? b.charAt(j) - '0' : 0);
sb.append(s % 2);
carry = s / 2;
--i;
--j;
}
return sb.reverse().toString();
}
}
using System;
using System.Collections.Generic;
public class Solution {
public string AddBinary(string a, string b) {
var list = new List<char>(Math.Max(a.Length, b.Length) + 1);
var i = a.Length - 1;
var j = b.Length - 1;
var carry = 0;
while (i >= 0 || j >= 0)
{
if (i >= 0)
{
carry += a[i] - '0';
}
if (j >= 0)
{
carry += b[j] - '0';
}
list.Add((char)((carry % 2) + '0'));
carry /= 2;
--i;
--j;
}
if (carry > 0) list.Add((char) (carry + '0'));
list.Reverse();
return new string(list.ToArray());
}
}
func addBinary(a string, b string) string {
for len(a) > len(b) {
b = "0" + b
}
for len(a) < len(b) {
a = "0" + a
}
zero := []byte("0")[0]
ret := make([]byte, len(a))
for right := len(a) - 1; right > 0; right-- {
t := ret[right] + a[right] + b[right] - zero*2
ret[right] = t%2 + zero
if t >= 2 {
ret[right-1] = 1
}
}
t := ret[0] + a[0] + b[0] - zero*2
ret[0] = t%2 + zero
if t >= 2 {
ret = append([]byte("1"), ret...)
}
return string(ret)
}