1. 程式人生 > >leetcode第一刷_Add Binary

leetcode第一刷_Add Binary

lee 整數加法 代碼 統一處理 個數 推斷 solution urn int

二進制相加,本質上就是大整數加法,有關大整數加法我的舍友教過我一個非常好的方法,先用一個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