【力扣】二進制求和

問題描述:

給定兩個二進制字符串,返回他們的和(用二進制表示)。

輸入爲非空字符串且只包含數字 1 和 0。

示例:

示例 1:

輸入: a = "11", b = "1"
輸出: "100"

示例 2:

輸入: a = "1010", b = "1011"
輸出: "10101"

思路分析:

首先判斷兩個字符串的長度,找到最長的那個,將兩個字符串反轉,再將短的那一個用字符 0 補齊;定義一個字符串sr用來返回結果。定義一個變量用來記錄進位,初始值爲0,每次對兩個字符串第 i 個字符 相加後再加上進位 進行判斷,如果結果sum大於1,那麼將sum-2的結果添加到sr中,進位賦值爲1;反之,直接將sum添加到sr中,進位賦值爲0。當判斷完所有的後,需要再次對進位進行判斷,如果爲1,那麼rs中再添加1;最後將rs反轉後輸出。

代碼:

class Solution {
    public String addBinary(String a, String b) {
        int len = Math.max(a.length(),b.length());
        StringBuilder aa = new StringBuilder(a).reverse();
        StringBuilder bb = new StringBuilder(b).reverse();
        
        while(aa.length()<len){
                aa.append('0');
        }
        while(bb.length()<len){
                bb.append('0');
        }
        int carry=0;
        StringBuilder sr = new StringBuilder();
        for(int i =0;i<len;i++){
            // 當前字符的 ASCII 值減去 '0' 的 ASCII 值,相當於將這個字符轉換成數值
            int sum = (aa.charAt(i)-'0')+(bb.charAt(i)-'0')+carry;
            if(sum>1){
                sr.append(sum-2);
                carry = 1;
            }else{
                sr.append(sum);
                carry=0;
            }
        }
        if(carry == 1){
            sr.append('1');
        }
        return sr.reverse().toString();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章