leetCode|二進制求和

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

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

示例 1:

  • 輸入: a = “11”, b = “1”
  • 輸出: “100”

示例 2:

  • 輸入: a = “1010”, b = “1011”
  • 輸出: “10101”
Java代碼
class Solution {
    public String addBinary(String a, String b) {
        StringBuffer sBuffer = new StringBuffer();
        int ca = 0;
        for (int lenA = a.length()-1, lenB = b.length()-1; lenA >= 0 || lenB >= 0; lenA--, lenB--) {
            int sum = ca;
            sum += lenA >= 0 ? a.charAt(lenA) - '0' : 0;
            sum += lenB >= 0 ? b.charAt(lenB) - '0' : 0;
            sBuffer.append(sum%2);
            ca = sum>>1;
        }
        sBuffer.append(ca == 1 ? ca : "");
        return sBuffer.reverse().toString();
    }
}
解釋

1.處理好較短字符串;不足位的補0;
2.從後往前遍歷兩個字符串,分別獲取相同位置上的字符;獲取字符求和後對2取摸的值;
3.對獲取的字符串取反;

結果

執行用時 :5 ms, 在所有 Java 提交中擊敗了77.60%的用戶
內存消耗 :35.6 MB, 在所有 Java 提交中擊敗了57.47%的用戶

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