【LeetCode-70】爬楼梯

85 阅读1分钟

使用动态规划方法。

假设n=10,从后往前分析,如果只差一步就达到第10层,那么当前必然是在第9层或第8层。

对于前者,走一次一级台阶,就到达,并且只能这样。所以对于前者:从地面到10的走法数量等于从地面到9的走法数量X;

对于后者,不能错误的认为有两种方式到达,即“连续走两次一级台阶”或“走一次二级台阶”,因为第一种走法覆盖了“当前在第9层”的情况,所以也是只能有一种方式。所以对于后者:从地面到10的走法数量等于从地面到8的走法数量Y;

 

综上,从地面到10的走法数量=X+Y

 

到第10阶有两种方案,1.从第9阶跳一步;2.从第8阶跳两步,所以到第10阶的跳法等于第9阶的方案+第8阶的方案。

有F[10]=F[9]+F[8]

同理可知F[9]、F[8]...的表达式。

一直到F[1],F[2],可以直接想到F[1]=1,F[2]=2

 

由此得到解体程序:

class Solution {
public:
    int climbStairs(int n) { 
        int F[50];
        F[1]=1;
        F[2]=2;
        for(int i=3;i<=n;i++)
        {
            F[i]=F[i-1]+F[i-2];
        }
        return F[n];
    }
};