模拟竖式加法即可
有两个重要的公式:
// 求当前位的值cur = (carry + a(i) + b(i)) % 2 (十进制就余10)// 进位carry = (carry + a(i) + b(i)) / 2
class Solution {public String addBinary(String a, String b) {if (a == null && a.length() == 0 && b == null && b.length() == 0) return "";if (a == null || b == null) return a == null ? b : a;StringBuilder sb = new StringBuilder();int len = Math.max(a.length(), b.length());int carry = 0, aL = a.length() - 1, bL = b.length() - 1;// 从后往前// 计算当前位的值:cur = (carry + a.charAt(i) + b.charAt(i)) % 2;// 计算进位:(carry + a.chat(i) + b.chatAt(i)) / 2//for (int i = 0; i < len; i++) {int res = carry;if (i < a.length()) {res += a.charAt(aL - i) - '0';}if (i < b.length()) {res += b.charAt(bL - i) - '0';}carry = res / 2;res %= 2;sb.append(res);}if (carry != 0) sb.append(carry);return sb.reverse().toString();}}
