LeetCode: Climbing Stairs
----- Условие ----- Подъем по лестнице. Чтобы добраться до верха, нужно сделать n шагов. Каждый раз вы можете подняться на 1 или 2 ступени. Требуется определить, сколькими разными способами можно добраться до верха.
----- Решение ----- Задача на последовательность Фибоначчи. Используем итеративное решение, чтобы сложность по памяти была O(1).
Для одной ступени - 1 вариант подъема (1 шаг), для двух ступеней - 2 варианта подъема (1,1 и 2 шага). Первые два числа последовательности определены. Для трех ступеней - 3 варианта (1,1,1; 2,1; 1,2). Для n ступеней количество вариантов равно сумме предыдущих двух значений: F(n) = F(n-1) + F(n-2). То есть все варианты F(n-1), к которым добавили 1, и все варианты F(n-2), к которым добавили 2.
Сложность алгоритма по времени - O(n), где n - переданное число (количество ступеней), сложность по памяти - O(1).
----- Код ----- /** * @param {number} n * @return {number} */ const climbStairs = function(n, memo = {}) { if (n <= 2) return n;
let firstItem = 1; let secondItem = 2;
for (let i = 3; i <= n; i++) { [secondItem, firstItem] = [firstItem + secondItem, secondItem]; }
return secondItem; };