67. Add Binary
这题的难点就在位数对齐。
我们将两个字符串从低位对齐,从低到高获取每一位。较短字符串的指针在到达0以后不会停下,而是会继续扫描,直到较长的那个字符串也被扫描完毕。如果某个index变为负数,说明已经越过了较短字符串的最高位,这时为了便于计算,就要为较短字符串的高位补0。最后,如果最后一步的和的进位为1,还需补上这个进位。
class Solution {
public String addBinary(String a, String b) {
StringBuilder builder = new StringBuilder();
char carry = '0';
int i = a.length() - 1;
int j = b.length() - 1;
while (i >= 0 || j >= 0) {
int iNum = (i >= 0) ? a.charAt(i) : '0';
int jNum = (j >= 0) ? b.charAt(j) : '0';
int sum = iNum + jNum + carry;
char temp;
int threeZero = '0' * 3;
if (sum == threeZero) {
temp = '0';
carry = '0';
} else if (sum == threeZero + 1) {
temp = '1';
carry = '0';
} else if (sum == threeZero + 2) {
temp = '0';
carry = '1';
} else {
temp = '1';
carry = '1';
}
builder.append(temp);
i--;
j--;
}
if (carry == '1') {
builder.append('1');
}
return builder.reverse().toString();
}
}