67. Add Binary
阿新 • • 發佈:2017-08-01
指針 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