首页 > 代码库 > leetcode第一刷_Add Binary

leetcode第一刷_Add Binary

二进制相加,本质上就是大整数加法,有关大整数加法我的舍友教过我一个很好的方法,先用一个int数组保存结果,将两个数对应位置相加,全部加完后,再统一处理进位的问题。这个方法同样适用于大整数的乘法。

这个题没什么特别的,注意一下进位别搞错了就行了,还有其实不用像我写的这么麻烦,可以一开始先判断哪个更长一些,交换一下。代码会简洁很多。

class Solution {
public:
    string addBinary(string a, string b) {
        int l1 = a.length(), l2 = b.length();
        string c(max(l1, l2)+1, ‘0‘);
        int i1 = l1-1, i2 = l2-1, ch=0, k = max(l1, l2);
        while(i1>=0&&i2>=0){
            if(a[i1] == ‘1‘ && b[i2] == ‘1‘){
                c[k--] = ch+‘0‘;
                ch = 1;
            }else if(a[i1]==‘1‘||b[i2]==‘1‘){
                if(ch){
                    c[k--] = ‘0‘;
                }else{
                    c[k--] = ‘1‘;
                }
            }else{
                c[k--] = ‘0‘+ch;
                ch = 0;
            }
            i1--; i2--;
        }
        while(i1>=0){
            if(ch){
                if(a[i1] == ‘1‘){
                    c[k--] = ‘0‘;
                    ch = 1;
                }else{
                    c[k--] = ‘1‘;
                    ch = 0;
                }
            }else{
                c[k--] = a[i1];
            }
            i1--;
        }
        while(i2>=0){
            if(ch){
                if(b[i2] == ‘1‘){
                    c[k--] = ‘0‘;
                    ch = 1;
                }else{
                    c[k--] = ‘1‘;
                    ch = 0;
                }
            }else{
                c[k--] = b[i2];
            }
            i2--;
        }
        if(ch)
            c[0] = ‘1‘;
        if(c[0] == ‘0‘)
            c = c.substr(1, c.length()-1);
        return c;
    }
};