1. 程式人生 > >[Leetcode] 67. 二進位制求和

[Leetcode] 67. 二進位制求和

題目描述:

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

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

示例 1:

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

示例 2:

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

解題思路:

這個題目沒啥好說的了,就是普通人腦子裡最正常的思路,跟前面的連結串列求和的一樣,設定個進位標誌位就行啦。雖然程式碼看上去挺長的,但是思路很簡答,就需要注意一些細節的東西就行了。

程式碼實現(Java語言):

class Solution {
    public String addBinary(String a, String b) {
        int i = a.length()-1,j = b.length()-1;
        int max = Math.max(i,j);
        char[] res = new char[max+2];
        int len = max + 1;
        char[] aa = a.toCharArray();
        char[] bb = b.toCharArray();
        int carry = 0;
        while(i>=0&&j>=0){
            if(aa[i] == '1' && bb[j] == '1'){
                res[len--] = carry==0?'0':'1';
                carry = 1;
            }else if(aa[i] == '0' && bb[j] == '0'){
                res[len--] = carry==0?'0':'1';
                carry = 0;
            }else{
                if(carry == 1){
                    res[len--] = '0';
                    carry = 1;
                }else{
                    res[len--] = '1';
                    carry = 0;
                }
            }
            i--;
            j--;
        }
        while(i >= 0){
            if(carry == 0){
                res[len--] = aa[i];
            }else{
                if(aa[i] == '1'){
                    res[len--] = '0';
                    carry = 1;
                }else{
                    res[len--] = '1';
                    carry = 0;
                }
            }
            i--;
        }
        while(j >= 0){
            if(carry == 0){
                res[len--] = bb[j];
            }else{
                if(bb[j] == '1'){
                    res[len--] = '0';
                    carry = 1;
                }else{
                    res[len--] = '1';
                    carry = 0;
                }
            }
            j--;
        }
        if(carry == 1){
            res[len--] = '1';
        }else{
            res[len--] = ' ';
        }
        return new String(res).trim();
    }
}