首页 > 代码库 > 67. Add Binary

67. Add Binary

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".

双字符串常用双指针问题

public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        int i = a.length() - 1, j = b.length() - 1;
        int carry = 0;
        while (i >= 0 || j >= 0) {
            int sum = carry;
            if (i >= 0) sum += a.charAt(i--) - ‘0‘;
            if (j >= 0) sum += b.charAt(j--) - ‘0‘;
            sb.append(sum % 2);
            carry = sum / 2;
            
        }
        if (carry != 0) sb.append(carry);
        return sb.reverse().toString();
    }

想好容器, 双指针, 借助sum, carry, 别忘了最后加carry, 和 reverse

字符转化为数值, a.charAt(i) - ‘0‘: 两个字符相减实际上是ASCII码对应的数相减; 也可以替换为:

 if (i >= 0) sum += Character.getNumericValue(a.charAt(i--));

getNumericValue

public static int getNumericValue(char ch)
返回指定的 Unicode 字符表示的 int 值。例如,字符 ‘\u216C‘(罗马数字 50)将返回一个值为 50 的整数。

字母 A-Z 的大写(‘\u0041‘ 到 ‘\u005A‘)、小写(‘\u0061‘ 到 ‘\u007A‘)和全形参数(‘\uFF21‘ 到 ‘\uFF3A‘ 和‘\uFF41‘ 到 ‘\uFF5A‘)形式拥有从 10 到 35 的数值。这独立于 Unicode 规范,该规范没有为这些 char 值分配数值。

67. Add Binary