描述

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

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

示例 1:

输入: a = “11”, b = “1”
输出: “100”
示例 2:

输入: a = “1010”, b = “1011”
输出: “10101”

Python

耍赖招数(一行搞定):
1.利用int(,2)将字符串转化成十进制数字
2.利用Python中的f-string将数字转换成2进制字符串

class Solution:
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        return f'{int(a,2)+int(b,2):b}'

不用Python语法糖:
利用递归(自我调用)解决问题

class Solution:
    def addBinary(self, a, b):
        if not a : return b
        if not b : return a
        if a[-1]=='0' and b[-1]=='0':
            return self.addBinary(a[0:-1],b[0:-1]) + '0' # 前面相加,最后加0,后面同理
        elif a[-1]=='1' and b[-1]=='1':
            return self.addBinary(self.addBinary(a[0:-1],b[0:-1]),'1')+ '0'
        else:
            return self.addBinary(a[0:-1],b[0:-1]) + '1'

Java

class Solution {
    public String addBinary(String a, String b) {
        StringBuffer sb = new StringBuffer();
        int i=a.length()-1, j=b.length()-1,carry=0;
        while(i>=0 || j>=0){
            int sum=carry; // take last carry into consideration
            if (i>=0) sum+=a.charAt(i--)-'0';
            if (j>=0) sum+=b.charAt(j--)-'0';
            sb.append(sum%2);
            carry = sum/2;
        }
        if(carry!=0) sb.append(carry);
        return sb.reverse().toString();
    }
}