Count number of binary strings without consecutive 1’s
Given a positive integer N, count all possible distinct binary strings of length N such that there are no consecutive 1’s.
Examples:
Input: N = 2
Output: 3
// The 3 strings are 00, 01, 10
Input: N = 3
Output: 5
// The 5 strings are 000, 001, 010, 100, 101
class Solution {
// O(n) space solution
public static int countStrings(int n) {
// Let a[i] be the number of binary strings of length i which do not contain any two consecutive 1’s and which end in 0.
// Similarly, let b[i] be the number of such strings which end in 1.
int a[] = new int[n];
int b[] = new int[n];
a[0] = b[0] = 1;
for (int i = 1; i < n; i++) {
a[i] = a[i - 1] + b[i - 1];
b[i] = a[i - 1];
}
return a[n - 1] + b[n - 1];
}
// O(1) space solution
public static int countStrings(int n) {
if (n == 0)
return 1;
if (n == 1)
return 2;
int a0 = 1;
int b0 = 1;
for (int i = 1; i < n; i++) {
int temp = a0 + b0;
b0 = a0;
a0 = temp;
}
return a0 + b0;
}
}