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();
    }
}