67. 二进制求和

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

输入为非空字符串且只包含数字 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;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内容 给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。 示例 1:...
    吃饭用盘装阅读 217评论 0 0
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,268评论 0 13
  • 17.5.26 星期五 晴 到托辅时,孩子已在外面玩儿了。看来是早写完作业了,几个孩子玩儿的挺开心,孩子看我来了,...
    gal2017阅读 183评论 0 0
  • 刚刚想起似乎快要到火把节了,或者已经过了。拿起手机想看看日历,可又无奈的笑笑只得放下,因为意识到日历里是不会有火把...
    流小王阅读 225评论 0 1