爬楼梯
题目链接:力扣题目链接
难度:简单
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 :
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
思路
- 确定dp数组以及下标的含义
dp[i]:爬到第i层楼梯,有dp[i]种方法 - 确定递推公式
dp[i-1] 上i-1层楼梯,有dp[i-1]种方法,跳一个台阶就是dp[i]
dp[i-2]上i-2层楼梯,有dp[i-2]种方法,跳两个台阶就是dp[i]
所以dp[i]就是dp[i-1] 和 dp[i-2]的和,dp[i] = dp[i-1] + dp[i-2] - dp数组的初始化
dp[1] = 1 dp[2] = 2,i从3 开始递推 - 确定遍历顺序
从递推公式来看遍历一定是从前往后的
动态规划法
class Solution{
public int climbStairs(int n) {
// 跟斐波那契数列一样
if(n<=2) return n;
int sum = 0;
int dp_1 = 1;
int dp_2 = 2;
for(int i =3 ;i<=n;i++){
sum = dp_1 + dp_2;
dp_1 = dp_2;
dp_2 = sum;
}
return sum;
}
}