# Count Binary String without Consecutive 1's

Data StructureAlgorithmsDynamic Programming

In this problem, we have to find some binary numbers which have no consecutive 1s. In a 3-bit binary string, there are three binary numbers 011, 110, 111, who have consecutive 1s, and five numbers are there which have no consecutive 1s. So after applying this algorithm to 3-bit numbers, the answer will be 5.

If a[i] be the set of binary numbers, whose number of bits are I, and not containing any consecutive 1s, and b[i] is the set of binary number, where a number of bits are I, and containing consecutive 1s, then there are recurrence relations like:

a[i] := a[i - 1] + b[i - 1]
b[i] := a[i - 1]

## Input and Output

Input:
This algorithm takes number of bits for a binary number. Let the input is 4.
Output:
It returns the number of binary strings which have no consecutive 1’s.
Here the result is: 8. (There are 8 binary strings which has no consecutive 1’s)

## Algorithm

countBinNums(n)

Input: n is the number of bits.
Output − Count how many numbers are present which have no consecutive 1.

Begin
define lists with strings ending with 0 and ending with 1
endWithZero := 1
endWithOne := 1

for i := 1 to n-1, do
endWithZero[i] := endWithZero[i-1] + endWithOne[i-1]
endWithOne[i] := endWithZero[i-1]
done
return endWithZero[n-1] + endWithOne[n-1]
End

## Example

#include <iostream>
using namespace std;

int countBinNums(int n) {
int endWithZero[n], endWithOne[n];
endWithZero = endWithOne = 1;

for (int i = 1; i < n; i++) {
endWithZero[i] = endWithZero[i-1] + endWithOne[i-1];
endWithOne[i] = endWithZero[i-1];
}
return endWithZero[n-1] + endWithOne[n-1];
}

int main() {
int n;
cout << "Enter number of bits: "; cin >> n;
cout << "Number of binary numbers without consecitive 1's: "<<countBinNums(n) << endl;
return 0;
}

## Output

Enter number of bits: 4
Number of binary numbers without consecitive 1's: 8