Problem 67

Add Binary

Posted by Ruizhi Ma on June 24, 2019

问题描述

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”

解决思路

  1. 将短的数,用0进行补齐
  2. 用record记录进位情况。
  3. 从右到左,循环将两数对应位的数,以及上一次计算进的位,进行相加。
  4. 最后循环结束,检查是否仍有进位,若有,则插入。

问题解惑

主要就三个问题:如何处理不等长?如何处理计算过程的进位?如何处理最后一位进位?这里学到了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();
    }
}