题目:
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
1 <= n <= 45
思路:
动态规划五部曲:
1.确定dp数组及下标的含义。dp[i]记录爬到i阶有多少种方法。
2.确定递推公式。dp[i-1]记录爬到i-1阶的方法种类,再爬1阶就到了i阶;dp[i-2]记录爬到i-2阶的方法种类,再爬2阶就到了i阶。所以dp[i]=dp[i-1]+dp[i-2]。
3.dp数组初始化。dp[0]没有意义,可以不管,dp[1]=1,dp[2]=2
4.确定遍历顺序。从前往后遍历,i值从3到n依次求得dp[i]
5.举例推导dp数组。例如n=5,dp数组序列从下标1开始依次为[1,2,3,5,8]
代码:
public int climbStairs(int n) {
int[] dp=new int[n+1];
dp[1]=1;
dp[2]=2;
for(int i=3;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}