題目:給定兩個二進制字符串,返回他們的和(用二進制表示)。
輸入爲非空字符串且只包含數字 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%的用戶