题目

题解

按位相加即可,注意字符串与整型的转换,数字小的填0,注意进位

  • 时间复杂度$O(max{(aLen + bLen)})$
  • 空间复杂度$O(max{(aLen + bLen)})$
class Solution {
public:
    string addBinary(string a, string b) {
        string res = "";//定义结果数组
        int aLen = a.size()-1, bLen = b.size()-1;//定义两个字符串的长度
        int carry = 0;//定义进位位
        while(aLen>=0 || bLen>=0){//两个字符串只要有一位有数字就继续迭代
            int m = aLen >=0? a[aLen--]-'0' : 0;//从后往前挨个加,若有字符就转化为数字,没有直接加0
            int n = bLen >=0? b[bLen--]-'0' : 0;//同上
            int sum = m + n + carry;//两个数字相加,再加上进位
            carry = sum/2;//进位更新为相加完后的大于2的部分
            res = to_string(sum%2) + res;//res加上加完后小于2的部分
            //注意这里不能用+=因为字符串相加要注意顺序
        }
        return carry? "1"+res:res;//结果要注意,有可能还有进位,就高位加1
    }
};