Home Add Binary
Post
Cancel

LeetCode #67: Add Binary (C/C++).

easy

source: https://leetcode.com/problems/add-binary/
C/C++ Solution to LeetCode problem 67. Add Binary.

Problem


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

Examples


Example 1:

Input: a = “11”, b = “1”
Output: “100”

Example 2:

Input: a = “1010”, b = “1011”
Output: “10101”

Constraints


  • 1 <= a.length, b.length <= 104
  • a and b consist only of '0' or '1' characters.
  • Each string does not contain leading zeros except for the zero itself.

Solution


  • We take the last character of both strings.
  • Add them (1 + 1 = 0 or 0 + 0 = 0 otherwise 1)
  • Add the previous result with a “carried” value (initially 0).
  • If at least two (of the charatesr from string one, from string two and carried value) are 1, then we carry 1 for next iteration.
  • Once finish, if we still carry a value, or the first charachter of result is 0, then we add a 1 at the start of the string.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Solution {
public:
  string addBinary(string a, string b) {
    int i=0;
    bool c = false;
    string s = ""s;
    while (i<a.size() || i<b.size()) {
      char aa = '0';
      char bb = '0';
      s = '0' + s;

      if (i<a.size())
        aa = a[a.size() - 1 - i];
      if (i<b.size())
        bb = b[b.size() - 1 - i];

      if (!(aa == '1') != !(bb == '1'))
        s[0] = '1';
      else
        s[0] = '0';

      if (!(s[0] == '1') != !c)
        s[0] = '1';
      else
        s[0] = '0';

      c = ((aa - 48) + (bb - 48) + (int)c) > 1;
      
      i++;
    }
    if (c || (s[0] == '0' && s.size() > 1))
      s = '1' + s;

    return s;
  }
};
This post is licensed under CC BY 4.0 by the author.

Plus One

Climbing Stairs