【Leetcode】二進制求和

 

解題思路:css

1. 首先在兩個字符串前面補‘0’,使它們等長。不然要一直監督操做是否超出兩個字符串的索引。spa

2. 從後向前遍歷全部位數,同位相加。字符相加,利用ASCII碼,字符在內部都用數字表示,咱們不須要知道具體數值,但可知 ‘0’ - ‘0’ = 0, ‘0’ + 1 = ‘1’,以此類推。字符的加減、比較大小,實際上都是內部數字的加減、比較大小code

3. 判斷位數相加的結果,若大於等於字符‘2’,則須要向前一位進1.blog

 

class Solution {
public:
    string addBinary(string a, string b) {
        int al = a.size();
        int bl = b.size();
        int cl = al >= bl? al : bl;
        cl++;
        
        for(int i = 0; i < cl-al; i++)
            a = '0' + a;
        
        for(int j = 0; j < cl-bl; j++)
            b = '0' + b;
        

        for(int k = cl - 1; k > 0; k--){
            a[k] = a[k] - '0' + b[k];
            
            if(a[k] >= '2'){
                
                a[k-1] = a[k-1] + 1;
                
                a[k] = (a[k] - '0') % 2 + '0';
            }
        }
        
        if (a[0] == '0')
            a = a.substr(1, cl-1);
        
        return a;
    }
};

上述解法,時間複雜度O(n)。索引

執行用時 :4 ms, 在全部 C++ 提交中擊敗了91.33%的用戶
內存消耗 :8.8 MB, 在全部 C++ 提交中擊敗了38.37%的用戶
 
附上一個大佬的解法,下回研究
https://leetcode-cn.com/problems/add-binary/solution/10xing-cdai-ma-by-destinyskid/
相關文章
相關標籤/搜索