1. 程式人生 > >LeetCode -[簡單]-67. 二進位制求和-Java實現

LeetCode -[簡單]-67. 二進位制求和-Java實現

題目描述:

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

輸入為非空字串且只包含數字 1 和 0

示例 1:

輸入:a = "11" b="1"

輸出:"100"

示例 2:

輸入:a = "1010" b="1011"

輸出:"10101"

思路:

根據二進位制的相加規則,當前位相加再%2則為結果,進位則/2。

可以先建立一個StringBuilder型別的result,從後往前,將每一位相加,結果加入result,最後反轉輸出。

程式碼:

class Solution {
    public String addBinary(String a, String b) {
        StringBuilder result = new StringBuilder();
        
        int al = a.length()-1;
        int bl = b.length()-1;
        int carry = 0;
        
        while( al >=0  || bl >=0 )
        {
            int sum = carry;
            if(al >= 0)
            {
                sum += (a.charAt(al) - '0');
                al--;
            }
            if(bl >= 0)
            {
                sum += (b.charAt(bl) - '0');
                bl--;
            }
            result.append(sum%2);   //相加結果
            carry = sum /2;         //進位,如果是1那麼carry=0,如果是2則要進位給下面一位+1
        }
        
        if(carry !=0 )              //都相加完了,還要進位的情況
            result.append(1);
        
        return result.reverse().toString();  //先反轉,再輸出
    }
}