Knowledge Guide
HomeDSACompany Practice

easy Add Binary

Problem Statement

Given two binary strings a and b, return a sum of a and b represented as binary strings.

Examples

  1. Example 1:

    • Input: a = "10110", b = "10101"
    • Expected Output: "101011"
    • Justification: The binary sum of "10110" (22 in decimal) and "10101" (21 in decimal) is "101011" (43 in decimal).
  2. Example 2:

    • Input: a = "111", b = "1"
    • Expected Output: "1000"
    • Justification: The binary sum of "111" (7 in decimal) and "1" (1 in decimal) is "1000" (8 in decimal).
  3. Example 3:

    • Input: a = "0", b = "0"
    • Expected Output: "0"
    • Justification: The binary sum of "0" and "0" remains "0".

Try it yourself

Try solving this question here:

✅ Solution Add Binary

Problem Statement

Given two binary strings a and b, return a sum of a and b represented as binary strings.

Examples

  1. Example 1:

    • Input: a = "10110", b = "10101"
    • Expected Output: "101011"
    • Justification: The binary sum of "10110" (22 in decimal) and "10101" (21 in decimal) is "101011" (43 in decimal).
  2. Example 2:

    • Input: a = "111", b = "1"
    • Expected Output: "1000"
    • Justification: The binary sum of "111" (7 in decimal) and "1" (1 in decimal) is "1000" (8 in decimal).
  3. Example 3:

    • Input: a = "0", b = "0"
    • Expected Output: "0"
    • Justification: The binary sum of "0" and "0" remains "0".

Solution

To solve this problem, we'll iterate over the input strings from right to left, simulating the binary addition process. We choose this approach because it directly simulates how binary addition works, carrying over bits when necessary. Our solution needs to handle different lengths of binary strings and the carry that can occur after adding the last bits.

By processing the strings from the end towards the beginning, we can easily manage carries and ensure that we consider all bits in both strings. If one string is shorter, we'll treat missing bits as '0'. This method is effective because it mirrors manual binary addition, ensuring no bit is missed and carries are correctly applied, resulting in an accurate binary sum.

Step-by-Step Algorithm

  1. Initialize Variables:

    • Create a variable result to store the final binary sum as a string.
    • Initialize two index variables, i and j, to point to the last characters of strings a and b respectively.
    • Initialize a carry variable to 0, which will hold the carry-over value when adding two binary digits.
  2. Iterate Over Strings:

    • Use a loop to iterate while either i or j is non-negative, or carry is 1. This ensures that you continue addition until both strings are completely traversed and any remaining carry is processed.
  3. Calculate Sum:

    • Within the loop, for each position starting from the end, add the corresponding binary digits of a and b, along with the carry.
    • If i or j has gone negative (indicating one string is shorter), treat the missing digits as 0.
  4. Update Result and Carry:

    • Calculate the binary digit to be appended to the result (sum % 2) and update the carry (sum / 2).
    • Prepend the calculated digit to the result string.
  5. Handle Remaining Carry:

    • After the loop, if there's a remaining carry, prepend it to the result.
  6. Return the Result:

    • Return the result string, which now contains the binary sum of a and b.

Algorithm Walkthrough

Let's consider the input: a = "10110", b = "10101"

  1. Initialization:

    • result = ""
    • i = 4 (pointing to the last character of "10110")
    • j = 4 (pointing to the last character of "10101")
    • carry = 0
  2. First Iteration (rightmost digits):

    • a[i] = 0, b[j] = 1
    • sum = 0 + 1 + 0 (carry) = 1
    • result = sum%2 + result = 1%2 + "" = "1", carry = sum/2 = 1/2 = 0
    • i = 3, j = 3
  3. Second Iteration:

    • a[i] = 1, b[j] = 0
    • sum = 1 + 0 + 0 = 1
    • result = sum%2 + result = 1%2 + "1" ="11", carry = sum/2 = 1/2 = 0
    • i = 2, j = 2
  4. Third Iteration:

    • a[i] = 1, b[j] = 1
    • sum = 1 + 1 + 0 = 2
    • result = sum%2 + result = 2%2 + "11" = "011", carry = sum/2 = 2/2 = 1
    • i = 1, j = 1
  5. Fourth Iteration:

    • a[i] = 0, b[j] = 0
    • sum = 0 + 0 + 1 (carry) = 1
    • result = sum%2 + result = 1%2 + "011" = "1011", carry = sum/2 = 1/2 = 0
    • i = 0, j = 0
  6. Fifth Iteration:

    • a[i] = 1, b[j] = 1
    • sum = 1 + 1 + 0 = 2
    • result = sum%2 + result = 2%2 + "1011" = "01011", carry = sum/2 = 2/2 = 1
    • i = -1, j = -1
  7. Handle Remaining Carry:

    • Since carry = 1, result = "101011"
  8. Final Result:

    • The final binary sum is "101011", which is the correct sum of "10110" and "10101".
Image
Image

Code

java
public class Solution {

  // Method to add two binary strings without needing to reverse at the end
  public String addBinary(String a, String b) {
    StringBuilder result = new StringBuilder();
    int i = a.length() - 1, j = b.length() - 1, carry = 0;

    // Loop through both strings from end to start
    while (i >= 0 || j >= 0 || carry == 1) {
      int sum = carry;
      if (i >= 0) sum += a.charAt(i--) - '0'; // Add bit from a
      if (j >= 0) sum += b.charAt(j--) - '0'; // Add bit from b
      // Prepend the calculated bit to the result string
      result.insert(0, sum % 2); // Use insert to prepend
      carry = sum / 2; // Determine new carry
    }

    return result.toString(); // No need to reverse
  }

  public static void main(String[] args) {
    Solution sol = new Solution();
    // Test the examples
    System.out.println(sol.addBinary("10110", "10101")); // "101011"
    System.out.println(sol.addBinary("111", "1")); // "1000"
    System.out.println(sol.addBinary("0", "0")); // "0"
  }
}

Complexity Analysis

Time Complexity

, where N and M are the lengths of the two input binary strings, respectively. This is because we iterate through each string once, from end to start, in the worst case. The time complexity is determined by the longer string since we perform the addition digit by digit, including handling of the carry.

Space Complexity

, which is required for storing the result. In the worst case, the length of the result string will be max(N, M) + 1 (due to a possible carry that adds an extra digit).

🤖 Don't fully get this? Learn it with Claude

Stuck on Add Binary? Open Claude, copy a block below, and it'll teach you this exact concept — visually and interactively.

🪜 Hint ladder (no spoilers)

Progressively stronger hints — you still solve it.

I'm working on the problem **Add Binary** (DSA). Give me a HINT LADDER: start with the tiniest nudge, then wait. Only reveal the next, stronger hint when I ask. Do NOT show the full solution unless I type 'show solution'. Keep me doing the thinking. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🎨 Explain the approach visually

See the technique, not just code.

Explain the optimal approach to **Add Binary** with a VISUAL walkthrough: trace it on a small concrete example using ASCII art / a step-by-step diagram, narrate what changes each step, then give time & space complexity with a one-line derivation. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🔍 Review my solution

Catch bugs, edge cases, sub-optimality.

I'll paste my solution to **Add Binary**. Review it for correctness, missed edge cases, and time/space complexity, then coach me toward the optimal — don't just rewrite it. Ask me to paste my code now. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🔁 Drill the pattern

Lock in recognition with look-alikes.

Give me 2 problems that use the SAME underlying pattern as **Add Binary**. For each, let me attempt first, then review my answer and name the trigger signal that reveals the pattern. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.

📝 My notes