假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
分析:爬楼梯、青蛙跳台阶等等也是经典的动态规划题目
第一步:dp[i]是什么?答:dp[i]是第i阶楼梯一共有几种方法。
第二步:怎么得到?答:因为可以爬1阶或2阶,所以靠前一阶和前二阶楼梯相加可得
第三部:初值? 答:第一阶有一种方法,第二阶有2种方法,可以这样设,但也可以通过第0阶与第1阶,但为了让第2阶有2种方法,第0阶需设置为1;
参考代码:
public int climbStairs(int n) {
if(n==0) return 0;
if(n==1) return 1;
int[] dp = new int[n+1];
dp[0]=1;
dp[1]=1;
for(int i=2;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
