67. Add Binary-Leetcode

作者: analanxingde | 来源:发表于2018-01-24 11:10 被阅读5次

    我的AC方案

    受到链表相加和上一题的影响,在原地对两个字符串进行相加并把结果存到a上 即可。

    class Solution {
    public:
        string addBinary(string a, string b) {
            int lena=a.size()-1;
            int lenb=b.size()-1;
            int r=0;
            while(lena>=0 &&lenb>=0)
            {
                a[lena]=a[lena]+(b[lenb]-'0')+r;
                if(a[lena]>='2')
                {
                    a[lena]-=2;
                    r=1;
                }
                else
                    r=0;
                lena--;
                lenb--;
            }
            while(lena>=0)
            {
                a[lena]+=r;
                if(a[lena]>='2')
                {
                    a[lena]-=2;
                    r=1;
                }
                else
                    r=0;
                lena--;
            }
            while(lenb>=0)
            {
                if(b[lenb]+r=='2')
                {
                    a.insert(a.begin(),'0');
                    r=1;        
                }
                 else
                 {
                     a.insert(a.begin(),b[lenb]+r);
                     r=0;  
                 }
                lenb--;
            }
            if(r==1)
                a.insert(a.begin(),'1');
            return a;
        }
    };
    

    最优方案

    最优方案一个大循环之后在内部判断,时间上所差无几。但是进位的表达方式采用位运算之前没有注意到这种表示方法carry = op1 & op2 | op1 & carry | op2 & carry

    class Solution {
    public:
        string addBinary(string a, string b) {
            string rs = "";
            int n1 = a.size(), n2 = b.size(), carry = 0;
            for (int i = n1 - 1, j = n2 - 1; i >= 0 || j >= 0; i--, j--) {
                int op1, op2;
                if (i >= 0) op1 = a[i] - '0';
                else op1 = 0;
                if (j >= 0) op2 = b[j] - '0';
                else op2 = 0;
                int sum = op1 ^ op2 ^ carry;
                rs = (char)(sum + '0') + rs;
                carry = op1 & op2 | op1 & carry | op2 & carry;
            }
            if (carry) rs = '1' + rs;
            return rs;
        }
    

    相关文章

      网友评论

        本文标题:67. Add Binary-Leetcode

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