【多次过】Lintcode 111. 爬楼梯

假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?

样例

比如n=3,1+1+1=1+2=2+1=3,共有3种不同的方法

返回 3


解题思路:

动态规划。我也不太明白,凑活看吧。

class Solution {
public:
    /**
     * @param n: An integer
     * @return: An integer
     */
    int climbStairs(int n) 
    {
        // write your code here
        vector<int> memo(n+1 , -1);
        
        memo[0] = 0;//如果还有0步到达顶部,则有0种方法到达楼顶
        memo[1] = 1;//如果还有1步到达顶部,则有1种方法到达楼顶
        memo[2] = 2;//如果还有2步到达顶部,则有两种方法到达楼顶
        for(int i=3;i<=n;i++)
            memo[i] = memo[i-1] + memo[i-2];
        
        return memo[n];
    }

};

猜你喜欢

转载自blog.csdn.net/majichen95/article/details/81086781