67. Add Binary
Leetcode Math StringGiven two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters 1 or 0.
Example 1:
Input: a = "11", b = "1"
Output: "100"
Example 2:
Input: a = "1010", b = "1011"
Output: "10101"
分析¶
这道题目其实想让我们模拟二进制加法。
public String addBinary(String a, String b) {
int a_len = a.length(), b_len = b.length();
int n = Math.max(a_len, b_len);
int add = 0, d;
StringBuilder res = new StringBuilder();
for (int i = 0; i < n; i++) {
if ( i < a_len && i < b_len) {
d = add + a.charAt(a_len - 1 - i) - '0' + b.charAt(b_len -1 - i) - '0';
} else if (i < a_len) {
d = add + a.charAt(a_len - 1 - i) - '0';
} else {
d = add + b.charAt(b_len - 1 - i) - '0';
}
if (d == 0) {
res.append("0");
add = 0;
} else if (d == 1) {
res.append("1");
add = 0;
} else if (d == 2){
res.append("0");
add = 1;
} else if (d == 3) {
res.append("1");
add = 1;
}
}
if (add == 1) res.append("1");
return res.reverse().toString();
}
在论坛上看到的比较优雅的代码
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int i = a.length() - 1, j = b.length() -1, carry = 0;
while (i >= 0 || j >= 0) {
int sum = carry;
if (j >= 0) sum += b.charAt(j--) - '0';
if (i >= 0) sum += a.charAt(i--) - '0';
sb.append(sum % 2);
carry = sum / 2;
}
if (carry != 0) sb.append(carry);
return sb.reverse().toString();
}
我写的代码更快,后面的更好看一些。