解题步骤
- 定义子问题:f(n) = f(n - 1) + f(n - 2)
- 反复执行:从 2 循环到 n ,执行上述公式
通过动态规划的方式实现
- 时间复杂度:O (n)
空间复杂度:O (n)
function climbStairs(n) {
if (n < 2) return 1;
const dp = [1, 1];
for (let i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
代码中存在一个循环,所以时间复杂度是 O (n)。而空间复杂度也是 O (n),因为使用了数组存储数据,数据会随着 n 增大而增大。
通过动态规划的方式实现(优化后)
- 时间复杂度:O (n)
空间复杂度:O (1)
function climbStairs(n) {
if (n < 2) return 1;
let dp0 = 1;
let dp1 = 1;
for (let i = 2; i <= n; i++) {
const temp = dp0;
dp0 = dp1;
dp1 = dp1 + temp;
}
return dp1;
}
代码中存在一个循环,所以时间复杂度是 O (n)。而空间复杂度是 O (1),因为把数据存储的方式改成了单个变量的存储方式。