67. Add Binary

November 06, 2016

67. Add Binary

Description

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

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

Analysis

这道题和之前做过的Add two number在题意上有很多相似之处,都是将两个二进制数进行加法运算,但这道题的难点在于,字符串有可能是不等长的,一旦出现了不等长,就很有可能会因为空指针的问题导致程序出现问题。

最开始我的思路比较直接,就是将字符串转换为二进制数后再进行加法运算,看似很简单的方法往往其中会暗藏很多陷阱,导致我卡在这道题上很长时间。

参阅了Discuss区之后,我获得了一种比较好的思路,既然之前程序出问题都是因为字符串不等长,那么我们只需要将短一些的字符串用0补齐不就解决了吗?

这种放法的思路是,从右到左按位取出字符串中的每一位,对于较短的字符串则用0来补位。对两个数进行加法运算,同时维护一个carry变量用于进位即可,代码如下:

如果运算到最高位发现还需要进位,那就在字符串开头插一个0即可。

class Solution {
public:
    string addBinary(string a, string b) {
        int str_size=max(a.size(),b.size());
        string res;
        int carry=0;
        for(int i=0;i<str_size;i++){
            int tmpA=i<a.size()?(a[a.size()-1-i]-'0'):0;
            int tmpB=i<b.size()?(b[b.size()-1-i]-'0'):0;
            res.insert(0,to_string((tmpA+tmpB+carry)%2));
            carry=(tmpA+tmpB+carry)>1?1:0;
        }
        if(carry==1)
            res.insert(0,"1");
        return res;
    }
};

北邮教务系统评教脚本

Published on September 17, 2017

72.Edit distance

Published on September 17, 2017