设dp[i]为i+1层楼梯下爬楼梯情况的解,
那到第i+1层有两种情况,如上图所示:
1. 第i层走一阶,就是第i层的所有解情况基础上走一阶,即实质上解数还等于dp[i-1]的解个数
1. 第i-1层走一阶,就是第i-1层的所有解情况基础上走二阶,即实质上解数还等于dp[i-2]的解个数
所以动态方程: dp[i] = dp[i-1] + dp[i-2]
代码如下:
class Solution {
public int climbStairs(int n) {
if(n == 1){
return 1;
}
if(n == 2){
return 2;
}
int[] dp = new int[n];
dp[0] = 1;
dp[1] = 2;
for(int i = 2; i < n; ++i){
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n-1];
}
}