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; };