假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例 2:
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
提示:
1 <= n <= 45
方法:
1.确定dp数组
n=1:
1. 1 阶
n=2:
1. 1 阶 + 1 阶
2. 2 阶n=3:
1. 1 阶 + 1 阶 + 1 阶
2. 2 阶 + 1 阶3.1 阶 + 2 阶
n=4:
1. 1 阶 + 1 阶 + 2 阶
2. 2 阶 + 2 阶3. 1 阶 + 1 阶 + 1 阶 + 1 阶
4. 2 阶 + 1 阶 + 1 阶5. 1 阶 + 2 阶 + 1 阶
…………
dp=1,2,3,5,……
我们要到4阶,我们可以从3阶走一阶,或者从2阶走二阶
可以看出,dp[i]=dp[i-1]+dp[i-2]
2.确定递推公式
dp[i]=dp[i-1]+dp[i-2]
3.确定dp数组如何初始化
dp[0]=1
dp[1]=2
4.确定遍历顺序(从前往后,从后往前)
从前往后
5.若出错,输出dp数组
代码;
#include<iostream>
#include<vector>
using namespace std;
int climbStairs(int n) {
if (n <= 1) {
return n;
}
int v[100];
v[1] = 1;
v[2] = 2;
for (int i = 3; i <=n; i++) {
v[i] = v[i - 1] + v[i - 2];
}
return v[n];
}
int main() {
int n;
cin >> n;
printf("%d", climbStairs(n));
return 0;
}