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