问题描述
Given 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”
解决思路
- 将短的数,用0进行补齐
- 用record记录进位情况。
- 从右到左,循环将两数对应位的数,以及上一次计算进的位,进行相加。
- 最后循环结束,检查是否仍有进位,若有,则插入。
问题解惑
主要就三个问题:如何处理不等长?如何处理计算过程的进位?如何处理最后一位进位?这里学到了StringBuilder的insert方法,可以很灵活的进行插入处理。
代码
package leetcode;
public class AddBinary {
public String addBinary(String a, String b) {
int maxLen = Math.max(a.length(), b.length());
StringBuilder sb = new StringBuilder();
int record = 0;
for (int i = 0; i < maxLen; i++) {
int tempA = a.length() > i ? a.charAt(a.length() - i - 1) - '0': 0;
int tempB = b.length() > i ? b.charAt(b.length() - i - 1) - '0': 0;
sb.insert(0, (tempA + tempB + record) % 2);
record = tempA + tempB + record > 1 ? 1 : 0 ;
}
if (record == 1) sb.insert(0, 1);
return sb.toString();
}
}