67. Add Binary

问题

Given two binary strings, return their sum (also a binary string).

例子

a = "11"
b = "1"
Return "100".

分析

  • 方法一:同时遍历两个字符串,当一个字符串遍历完毕的时候再遍历另一个字符串剩下的部分。注意位数和进位的计算可以使用位运算;
  • 方法二:将字符串的遍历和最后进位的处理合并到一个循环中。

要点

  • 考虑进位;
  • 尽量让代码简洁明了。

时间复杂度

O(m+n),m和n是两个二进制字符串的个数。

空间复杂度

O(1)

代码

方法一

class Solution {
public:
    string addBinary(string a, string b) {
        string res(max(a.size(), b.size()) + 1, '0');
        int i = a.size() - 1, j = b.size() - 1, sum = 0, carry = 0, cnt = 0;
        while (i >= 0 && j >= 0) {
            sum = (a[i] - '0') + (b[j] - '0') + carry;
            carry = sum >> 1;
            sum = sum & 1;
            res[res.size() - 1 - cnt++] = sum + '0';
            i--; j--;
        }
        while (i >= 0) {
            sum = (a[i] - '0') ^ carry;
            carry = (a[i] - '0') & carry;
            res[res.size() - 1 - cnt++] = sum + '0';
            i--;
        }
        while (j >= 0) {
            sum = (b[j] - '0') ^ carry;
            carry = (b[j] - '0') & carry;
            res[res.size() - 1 - cnt++] = sum + '0';
            j--;
        }
        if (carry == 1) res[res.size() - 1 - cnt++] = '1';
        else res.erase(0, 1);
        return res;
    }
};

方法二

class Solution {
public:
    string addBinary(string a, string b) {
        string res;
        int i = a.size() - 1, j = b.size() - 1, c = 0;
        while (i >= 0 || j >= 0 || c == 1) {
            c += i >= 0 ? a[i--] - '0' : 0;
            c += j >= 0 ? b[j--] - '0' : 0;
            res = (char)((c & 1) + '0') + res;
            c >>= 1;
        }
        return res;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容