Given two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters 1 or 0.
Example 1:
Input: a = “11”, b = “1”
Output: “100”
Example 2:
Input: a = “1010”, b = “1011”
Output: “10101”
两个二进制字符串相加求和
思路:
和十进制一样,从低位到高位按位计算,
最后不要忘了进位。
用StringBuilder的append,最后再reverse, 要比insert(0, 数字) 要快。
public String addBinary(String a, String b) {
int ia = a.length()-1;
int ib = b.length()-1;
int carry = 0;
StringBuilder res = new StringBuilder();
while(ia >= 0 || ib >= 0) {
int sum = carry;
if(ia >= 0) sum += a.charAt(ia)-'0';
if(ib >= 0) sum += b.charAt(ib)-'0';
if(sum >= 2) carry = 1;
else carry = 0;
//比res.insert(0, sum%2)快
res.append(sum % 2);
ia --;
ib --;
}
if(carry == 1) res.append('1');
return res.reverse().toString();
}