Учитывая положительное целое число N, подсчитайте все возможные различные двоичные строки длины N, чтобы не было последовательных 1.
Примеры:
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
Эта проблема может быть решена с помощью динамического программирования. Пусть a [i] будет числом двоичных строк длины i, которые не содержат никаких двух последовательных единиц и заканчиваются на 0. Аналогично, пусть b [i] будет количеством таких строк, заканчивающихся на 1. Мы можем добавить 0 или 1 к строке, заканчивающейся на 0, но мы можем добавить только 0 к строке, заканчивающейся на 1. Это приводит к рекуррентному отношению:
a[i] = a[i - 1] + b[i - 1] b[i] = a[i - 1]
Базовые случаи повторения выше: a [1] = b [1] = 1. Общее количество строк длины i это просто a [i] + b [i].
Ниже приводится реализация вышеуказанного решения. В следующей реализации индексы начинаются с 0. Таким образом, a [i] представляет количество двоичных строк для входной длины i + 1. Аналогично, b [i] представляет двоичные строки для входной длины i + 1.
|
Джава
|
python3
|
C #
|
PHP
|
Выход:
5
Источник:
courses.csail.mit.edu/6.006/oldquizzes/solutions/q2-f2009-sol.pdf
Если мы более внимательно посмотрим на паттерн, мы можем заметить, что счет фактически является (n + 2) -ым числом Фибоначчи для n> = 1. Числа Фибоначчи равны 0, 1, 1, 2, 3, 5, 8. , 13, 21, 34, 55, 89, 141,….
n = 1, count = 2 = fib(3) n = 2, count = 3 = fib(4) n = 3, count = 5 = fib(5) n = 4, count = 8 = fib(6) n = 5, count = 13 = fib(7) ................
Поэтому мы можем посчитать строки за O (Log n), также используя метод 5 здесь .
Похожие сообщения:
Числа от 1 до n бит без последовательных 1 в двоичном представлении.
Эта статья пополняемая Рахул Джейна. Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме
Рекомендуемые посты:
- Найдите количество двоичных строк длиной N, по крайней мере, с 3 последовательными единицами
- Подсчитайте количество двоичных строк, чтобы во всех единицах не было подстроки длиной больше или равной 3
- Считать строки с последовательными 1
- Подсчитать двоичные строки с двойными нулями в первой половине
- Количество неперекрывающихся подстрок «101» и «010» в заданной двоичной строке
- Python | Проверьте, есть ли K последовательных 1 в двоичном числе
- Считать двоичные строки с k раз, появляющихся рядом двух установленных бит
- Максимальное количество последовательных 1 в двоичном представлении всех элементов массива
- Подсчитать минимальное количество подмножеств (или подпоследовательностей) с последовательными числами
- Минимальное количество двоичных строк для представления числа
- Количество подстрок в данной двоичной строке, делимое на 2
- Количество двоичных строк длины N с K смежными битами набора
- Для заданной двоичной строки подсчитайте количество подстрок, которые начинаются и заканчиваются на 1.
- Проверьте, содержит ли двоичная строка последовательные одинаковые или нет
- Числа от 1 до n бит без последовательных 1 в двоичном представлении.
0.00 (0%) 0 votes