美文网首页
67. Add Binary

67. Add Binary

作者: RobotBerry | 来源:发表于2017-05-06 16:10 被阅读0次

    问题

    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;
        }
    };
    

    相关文章

      网友评论

          本文标题:67. Add Binary

          本文链接:https://www.haomeiwen.com/subject/qazetxtx.html