LeetCode題目之67

題目描述如下:

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

The input strings are both non-empty and contains only characters 1 or 0.

Example 1:

Input: a = "11", b = "1"
Output: "100"
Example 2:

Input: a = "1010", b = "1011"
Output: "10101"

個人思路:

       我的思路就是最簡單的我們用筆算二進制加法的思路,讓兩個數尾端對齊,然後設置一個臨時變量用作爲判斷上一輪加法中是否有進位。然後以從尾端開始遍歷的方式開始來進行遍歷,循環次數是其中較短的字符串的長度。

       遍歷完成之後,我們就需要處理比較長的一個字符串中還沒有進行相加的數,這個時候就把還沒有處理的數與進位進行相加,方法類似於之前的循環。

代碼:

string addBinary(string a, string b) {
        string sum("");
        bool flag = false; //標誌是否需要進位
        int i,j; //記錄下標
        for(i = a.length() - 1, j = b.length() - 1; i >= 0  && j >= 0; --i, --j){
            if(a[i] != b[j]) {//不相等則相加必爲1,然後再處理進位
                if(flag) {//有進位則結果爲2,置進位爲1,添0
                    flag = true;    
                    sum.append("0");
                }
                else {//無進位則結果爲1,置進位爲0,添1
                    flag = false;                
                    sum.append("1");   
                }
            }
            else if(a[i] == '1'){//相等且爲2
                if(flag) {//有進位則結果爲3,置進位爲1,添1
                    flag = true;    
                    sum.append("1");
                }
                else {//無進位則結果爲2,置進位爲1,添0
                    flag = true;                
                    sum.append("0");   
                }
            }
            else{
                if(flag) {//有進位則結果爲1,置進位爲0,添1
                    flag = false;    
                    sum.append("1");
                }
                else {//無進位則結果爲0,置進位爲0,添0
                    flag = false;                
                    sum.append("0");   
                }
            }
        }

        while(i-- >= 0 && flag){ //若a有剩餘則依次與進位相加,當無進位時只需要把剩下的字符串直接接在前端即可
            if(a[i+1] == '1') sum.append("0");
            else {
                sum.append("1");
                flag = false;
            }
        }
        while(j-- >= 0 && flag){//若b有剩餘則依次與進位相加,此while循環與上一個while循環只會執行一個
            if(b[j+1] == '1') sum.append("0");
            else {
                sum.append("1");
                flag = false;
            }
        }
        if(flag) sum.append("1"); //判斷最前端是否還有進位,如果有的話再加1,如果執行了這一步下面的判斷語句則不會執行
        reverse(sum.begin(),sum.end()); //上面的計算存儲是一個小端存儲,因此需要反轉字符串
        if(i+1 >= 0){
            sum = a.substr(0,i+2) + sum;
        }
        else if(j+1 >= 0){
            sum = b.substr(0,j+2) + sum;
        }
        return sum;
    }

 

發佈了9 篇原創文章 · 獲贊 0 · 訪問量 6939
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章