1. 程式人生 > >67. Add Binary

67. Add Binary

指針 brush 小寫 light 雙指針 容器 stringbu 擁有 獨立

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