一,题目描述
二,解题思路
动态规划
动规五部曲:
1. 确认dp数组以及下标含义
2. 推导递推公式
3. 确认dp数组如何初始化
4. 确认遍历顺序
5. 打印dp数组
dp数组含义:到第i层的方法数目
下标含义:层数
递推公式:dp[i] = dp[i-1] + dp[i-2]
dp数组初始化:由于第1层与第2层方法固定,且从第3层开始可以通过前两层推出,所以dp[1]=1,dp[2]=2
遍历顺序与打印dp数组放在代码中
三,代码实现
class Solution {
public:
int climbStairs(int n) {
int *dp = new int[n+1];
dp[1] = 1;
dp[2] = 2;
for(int i=3; i<=n; i++) //遍历顺序从第3层开始
{
dp[i] = dp[i-1] + dp[i-2];
}
for(int i = 1; i<=n; i++) //打印dp数组
{
cout << dp[i] <<" ";
}
cout << endl;
}
};