67. Add Binary

来源:互联网 发布:淘宝怎么设置花呗付款 编辑:程序博客网 时间:2024/05/22 15:22

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

For example,
a = "11"
b = "1"
Return "100".

我用了最笨的方法,从后向前逐位相加,然后处理每一位的进位,最后还要单独处理第一位的进位:

class Solution {public:    string addBinary(string a, string b) {        string ans;        int ia = a.size()-1, ib = b.size()-1;        while (ia >= 0 || ib >= 0) {            if (ia >= 0 && ib >= 0) {                ans.insert(ans.begin(), a[ia] + b[ib] - '0');                ia--;                ib--;            }            else if (ia < 0 && ib >= 0) {                ans.insert(ans.begin(), b[ib]);                ib--;            }            else if (ia >= 0 && ib < 0) {                ans.insert(ans.begin(), a[ia]);                ia--;            }        }        for (int i = ans.size() - 1; i > 0; i--) {            int next = (ans[i] - '0') / 2;            ans[i] = (ans[i] - '0') % 2 + '0';            ans[i-1] += next;        }        if (ans[0] >= '2') {            char start = (ans[0] - '0') / 2 + '0';            ans[0] = (ans[0] - '0') % 2 + '0';            ans.insert(ans.begin(), start);        }        return ans;    }};

再贴一个discussion里的一个高票解法,思路相似,但少了很多单独处理的步骤,十分简洁:

class Solution{public:    string addBinary(string a, string b)    {        string s = "";        int c = 0, i = a.size() - 1, j = b.size() - 1;        while(i >= 0 || j >= 0 || c == 1)        {            c += i >= 0 ? a[i --] - '0' : 0;            c += j >= 0 ? b[j --] - '0' : 0;            s = char(c % 2 + '0') + s;            c /= 2;        }        return s;    }};
原创粉丝点击