题意:
        给定两个用字符串表示的二进制数,返回他们的和。

方法一:
模拟

思路:
        直接模拟。
        逆序遍历字符串,实现对应位的相加求和运算;
        并对进位进行判断,追加字符给结果字符串;
        最后,反转结果字符串即可。

        

class Solution {
public:
    
    string binaryAdd(string A, string B) {
        int n1=A.size(),n2=B.size();
        int flag=0;//进位标志
        string res="";
        for(int i=n1-1,j=n2-1;i>=0||j>=0;i--,j--){//逆向遍历
            //计算求和
            int t=flag;
            if(i>=0)
                t+=A[i]-'0';
            if(j>=0)
                t+=B[j]-'0';
            if(t>=2){//判断进位
                flag=1;
            }else{
                flag=0;
            }
            t%=2;
            res+=t+'0';//追加字符
        }
        if(flag){//最后判断进位
            res+='1';
        }
        reverse(res.begin(),res.end());//反转结果字符串
        return res;
    }
};

时间复杂度:
空间复杂度:

方法二:
java

思路:
        java实现逆序模拟。
        思路与方法一相同。
        注意点:答案字符串追加字符串需要强制类型转换。

import java.util.*;


public class Solution {
    
    public String binaryAdd (String A, String B) {
        int n1=A.length(),n2=B.length();
        int flag=0;//进位标志
        StringBuffer res=new StringBuffer("");
        for(int i=n1-1,j=n2-1;i>=0||j>=0;i--,j--){//逆向遍历
            //计算求和
            int t=flag;
            if(i>=0)
                t+=A.charAt(i)-'0';
            if(j>=0)
                t+=B.charAt(j)-'0';
            if(t>=2){//判断进位
                flag=1;
            }else{
                flag=0;
            }
            t%=2;
            res.append((char)(t+'0'));//追加字符
        }
        if(flag==1){//最后判断进位
            res.append('1');
        }
        //反转结果字符串
        return res.reverse().toString();
    }
}


时间复杂度:
空间复杂度: