假设你正在爬楼梯。需要 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 <= 45n=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]
dp[i]=dp[i-1]+dp[i-2]
dp[0]=1
dp[1]=2
从前往后
代码;
- #include
- #include
- 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;
- }