LeetCode 面试:Add Binary

1 题目

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

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

接口

String addBinary(String a, String b)

2 思路

处理二进制求和和进位。从低位开始,一直相加并且维护进位。和Add Two Numbers的区别是这个题目低位在后面,所以要从string的尾部往前加。
代码采用Add Two Number的思路,先把Input String逆序,让低位在前面,最后把result在逆序一次。

复杂度

Time: O(n)
Space: O(n)

3 代码

 1     public String addBinary(String a, String b) {
 2         char[] ac = new StringBuilder(a).reverse().toString().toCharArray();
 3         char[] bc = new StringBuilder(b).reverse().toString().toCharArray();
 4         int alen = ac.length;
 5         int blen = bc.length;
 6         StringBuilder res = new StringBuilder();
 7         int max = alen > blen ? alen : blen;
 8         int carry = 0;
 9         for (int i = 0; i < max; i++) {
10             int ai = i < alen ? ac[i] - '0' : 0;
11             int bi = i < blen ? bc[i] - '0' : 0;
12             int sum = ai + bi + carry;
13             carry = sum / 2;
14             res.append((char) (sum % 2 + '0'));
15         }
16         if (carry == 1)
17             res.append('1');
18         return res.reverse().toString();
19     }

4 总结

  • 关键是处理相加和进位
  • 采用StringBuilder reverse()
  • 和Add Two Number类似

5 扩展

String、StringBuilder、StringBuffer的区别?

6 参考

  1. Add Binary
  2. Add Binary Leetcode java
  3. LeetCode:Add Binary
  4. Add Binary -- LeetCode
原文地址:https://www.cnblogs.com/byrhuangqiang/p/4310517.html