Есть n лестниц, человек, стоящий внизу, хочет достичь вершины. Человек может подняться на 1 или 2 ступеньки одновременно. Подсчитайте количество способов, которыми человек может достичь вершины.
Рассмотрим пример, показанный на диаграмме. Значение n равно 3. Есть 3 способа достичь вершины. Диаграмма взята из пазлов Легче Фибоначчи
Больше примеров:
Input: n = 1 Output: 1 There is only one way to climb 1 stair Input: n = 2 Output: 2 There are two ways: (1, 1) and (2) Input: n = 4 Output: 5 (1, 1, 1, 1), (1, 1, 2), (2, 1, 1), (1, 2, 1), (2, 2)
Мы можем легко найти рекурсивную природу в вышеуказанной проблеме. Человек может добраться до n-й ступени либо с (n-1) -го уровня, либо с (n-2) -го уровня. Пусть общее количество способов добраться до ступеньки не будет «way (n)». Значение 'way (n)' можно записать следующим образом.
ways(n) = ways(n-1) + ways(n-2)
Вышеупомянутое выражение на самом деле является выражением для чисел Фибоначчи , но есть одна вещь, на которую следует обратить внимание: значение way (n) равно fibonacci (n + 1).
путей (1) = фиб (2) = 1
пути (2) = фиб (3) = 2
пути (3) = фиб (4) = 3
Таким образом, мы можем использовать функцию для чисел Фибоначчи, чтобы найти значение путей (n). Ниже приводится реализация вышеуказанной идеи на C ++.
|
Джава
|
питон
|
C #
|
PHP
|
Выход:
Number of ways = 5
Временная сложность вышеописанной реализации является экспоненциальной (золотое сечение повышено до степени n). Он может быть оптимизирован для работы за время O (Logn) с использованием ранее обсужденных оптимизаций функции Фибоначчи .
Обобщение вышеуказанной проблемы
Как посчитать количество способов, если человек может подняться до m ступеней по заданному значению m? Например, если m равно 4, человек может одновременно подниматься на 1 ступеньку, 2 ступеньки, 3 ступеньки или 4 ступеньки.
Мы можем написать повторение следующим образом.
ways(n, m) = ways(n-1, m) + ways(n-2, m) + ... ways(n-m, m)
Ниже приводится реализация вышеупомянутых повторений.
|
Джава
|
питон
|
C #
|
PHP
|
Выход:
Number of ways = 5
Временная сложность вышеуказанного решения является экспоненциальной. Его можно оптимизировать до O (mn) с помощью динамического программирования. Ниже приводится решение на основе динамического программирования. Мы строим таблицу res [] снизу вверх.
|
Джава
|
питон
|
C #
|
PHP
|
Выход:
Number of ways = 5
Эта статья предоставлена Abhishek . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме
Рекомендуемые посты:
- Подсчитайте способы достижения n-й ступени, используя шаги 1, 2 или 3
- Найдите количество способов добраться до Kth step в лестничной клетке
- Подсчитайте способы достижения результата, используя 1 и 2 без последовательных 2
- Подсчитайте количество способов прыгнуть до конца
- Подсчитайте количество способов добраться до места назначения в лабиринте
- Подсчитайте количество способов достичь заданного результата в игре
- Подсчитать количество способов достижения заданного балла в Матрице
- Количество способов достичь конца матрицы с ненулевым значением И
- Количество способов достичь N-го этажа, совершив не более K прыжков
- Количество способов достижения (X, Y) в матрице, начиная с начала координат
- Подсчитайте количество способов получить нечетную сумму
- Количество различных способов выразить N как сумму 1, 3 и 4
- Подсчитайте возможные способы строительства зданий
- Подсчитайте количество способов пройти Матрицу
- Посчитайте способы построить улицу с учетом ограничений
0.00 (0%) 0 votes