Programming

Leetcode-67. Add Binary

Leetcode-67. Add Binary

Given two binary strings a and b, return their sum as a binary string.

Example 1:

Input: a = "11", b = "1"
Output: "100"

Example 2:

Input: a = "1010", b = "1011"
Output: "10101"

<解題>

  1. 用carry保存進位的值,由後面往前算,數字的值相加進carry中
  2. while (i >= 0 || j >= 0|| carry==1),代表還有i,j數字要處理或者還有進位要處理
  3. sb.append(carry % 2); //當前位子的結果0或1
  4. carry /= 2做進位的處理
  5. 最後把這個sb反轉字串返回

public class Solution {
    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|| carry==1) {
            if (j >= 0) {
                carry += b.charAt(j--) - '0';
            }
            if (i >= 0) {
                carry += a.charAt(i--) - '0';
            }
            sb.append(carry % 2);  //當前位子的結果0,1
            carry /= 2; //carry/2 以進行進位處理
        }
        return sb.reverse().toString();
    }
}

Time: O(max(m, n))->兩字串長度

Space: O(max(m, n)

另外一種寫法


public class Solution {
    public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        int i = a.length() - 1, j = b.length() -1, carry = 0;
				// a = "1010", b = "1011"
        while (i >= 0 || j >= 0|| carry==1) {
					 if (i >= 0) {
                carry += a.charAt(i) - '0';
            }
            if (j >= 0) {
                carry += b.charAt(j) - '0';
            }
            sb.append(carry % 2);  //當前位子的結果0,1
            carry /= 2; //carry/2 以進行進位處理
            i--;
            j--;
        }
        return sb.reverse().toString();
    }
}
**可以和 371. Sum of Two Integers做比較