leetcode第一刷_Add Binary

Posted jhcelue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    }
};


以上是关于leetcode第一刷_Add Binary的主要内容,如果未能解决你的问题,请参考以下文章

leetcode第一刷_ Flatten Binary Tree to Linked List

leetcode第一刷_Edit Distance

leetcode第一刷_Combinations

leetcode第一刷_Subsets II

leetcode第一刷_Text Justification

leetcode第一刷_Decode Ways