67. 二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:
输入: a = “1010”, b = “1011”
输出: “10101”
Code(Java)
class Solution {
public String addBinary(String a, String b) {
char[] r = new char[Math.max(a.length(), b.length()) + 1];
char[] s1 = a.toCharArray();
char[] s2 = b.toCharArray();
int i = s1.length - 1, j = s2.length - 1, k = r.length - 1;
int temp = 0, sum;
while (i >= 0 && j >= 0) {
sum = s1[i] + s2[j] - '0' - '0' + temp;
r[k--] = (char) (sum % 2 + '0');
temp = sum / 2;
i--;
j--;
}
while (i >= 0) {
r[k--] = (char) ((s1[i] - '0' + temp) % 2 + '0');
temp = (s1[i] - '0' + temp) / 2;
i--;
}
while (j >= 0) {
r[k--] = (char) ((s2[j] - '0' + temp) % 2 + '0');
temp = (s2[j] - '0'+ temp) / 2;
j--;
}
r[0] = (char) (temp + '0');
return new String(r, r[0] == '0' ? 1 : 0, r[0] == '0' ? r.length - 1 : r.length);
}
}