假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
思路
我们要从中找出规律,可以在纸上画一下,规律其实不难发现,就是看你怎么把控
- 第一阶是一种,第二阶是2中,第三阶是3种其实规律已经出来了
- 第3阶等于第一节加上第二阶的方法种数
- 我们可以通过一个公司来体现:f(n)=f(n-1)+f(n-2)
- 这道题解法很多,可以递归,也可以动态规划
- 递归大家不能想到,但是会出现大量的重复计算,使用动态规划可以将时间复杂度变为o(n)
- 我们可以用一个dp数组来记录每一次爬楼梯的状态,n阶取出n阶的状态就行
/**
* @param {number} n
* @return {number}
*/
var climbStairs = function(n) {
let dp=[n+1];
dp[1]=1;
dp[2]=2;
for(let i=3;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2]
}
return dp[n];
};