昨天跑了地下城救公主,今天爬爬楼梯冷静下!
一、题目描述
难度 简单
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n
是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
二、思路分析
这个题很明显,可以用动态规划来解
题目唯一的条件时每次可以爬 1
或 2
个台阶
假设n = 4
;那最后一步可以是从第 2
个台阶或第 3
个台阶上去,即f(4) = f(3) + f(2)
;
那问题就变成了爬到第 2
个台阶和爬到第 3
个台阶有多少种方法?
同样的,第 3
个台阶可以从第1
个台阶或者第2
个台阶上去,即f(3) = f(2) + f(1)
;
所以就有了公式f(n) = f(n-1) + f(n-2)
;
从n = 1
开始,确定前两个就可以开始动态规划了
三、AC代码
var climbStairs1 = function (n) {
let dp = Array.from(n + 1).fill(0);
dp[1] = 1;
dp[2] = 2;
for (let i = 3; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n]
};