美文网首页
67. 二进制求和

67. 二进制求和

作者: DAFFE | 来源:发表于2018-08-20 17:22 被阅读0次

    给定两个二进制字符串,返回他们的和(用二进制表示)。

    输入为非空字符串且只包含数字 1 和 0。

    示例 1:

    输入: a = "11", b = "1"
    输出: "100"
    示例 2:

    输入: a = "1010", b = "1011"
    输出: "10101"

    //先补齐较短串,相应元素相加分为四种情况+flag,另外单独考虑最后进位。
    class Solution {
    public:
        string addBinary(string a, string b) {
            string s="";
        int i,j,flag=0;
        for (i=a.size()-1,j=b.size()-1;i>=0||j>=0;i--,j--){
            if(j<0){b.insert(0,"0");j=0;}
            if(i<0){a.insert(0,"0");i=0;}//补齐
            switch((a[i]-'0')+(b[j]-'0')+flag){
                case 3:
                    flag=1;
                    s.insert(0,"1");
                    break;
                case 2:
                    flag=1;
                    s.insert(0,"0");
                    break;
                case 1:
                    flag=0;
                    s.insert(0,"1");
                    break;
                case 0:
                    s.insert(0,"0");
                    flag=0;
                    break;
            }
        }
        if(flag==1) s.insert(0,"1");
        return s;
        }
    };
    

    简洁写法:

    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)//循环直到i<0,j<0且进位=0
            {
                c +=    i >= 0 ? a[i --] - '0' : 0;//i=0 c+0
                c +=    j >= 0 ? b[j --] - '0' : 0;//c=sum(a+b+进位);
                s = char(c % 2 + '0') + s;//进位之后:0:sum=2/0;1:sum=1
                c /= 2;// 表示进位 1:sum=2;0:sum=0/1
            }
            return s;
        }
    };
    

    相关文章

      网友评论

          本文标题:67. 二进制求和

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