【算法】爬楼梯-动态规划
2023/03/28 10:57:55
题目
解题思路
用动态规划的思想分解问题:n 级台阶的爬法
= n-1级台阶的爬法
+ n-2级台阶的爬法
。
将 n 级台阶的爬法记为 f(n)
,那么 f(n) = f(n-1) + f(n-2)
,很明显是一个斐波那契数列。
- 斐波那契数列:
function climbStairs(n) {
if (n <= 1) {
return 1;
}
return climbStairs(n - 1) + climbStairs(n - 2);
}
climbStairs 函数执行一次,内部执行两次 climbStairs 函数,n 的值与 climbStairs 函数调用次数关系为:,所以时间复杂度为 。
时间复杂度:
空间复杂度:
- 优化后的斐波那契数列
观察发现上面算法中会出现大量的重复计算,可以将计算结果缓存起来,减少计算次数。
const cache = {
0: 1,
1: 1,
};
function climbStairs(n) {
if (cache[n]) {
return cache[n];
}
cache[n] = climbStairs(n - 1) + climbStairs(n - 2);
return cache[n];
}
时间复杂度:
空间复杂度:
- 用迭代优化
var climbStairs = function (n) {
let left = 0,
mid = 0,
right = 1;
for (let i = 1; i <= n; i++) {
left = mid;
mid = right;
right = left + mid;
}
return right;
};
let result = climbStairs(43);
console.log(result);
时间复杂度: 空间复杂度: