题解 | #爬楼梯#

爬楼梯

http://www.nowcoder.com/practice/d679cfa563974385a3bef8cd854c73db

思路:到第n阶楼梯只有两种方式,从第n-1阶迈一步和从第n-2阶迈两步。假设f(n)表示从第1阶到第n阶的所有方法数,那么f(n)=f(n-1)+f(n-2).于是利用这个式子可以用递归思想。但是明显递归的复杂度太高,于是考虑迭代的思路,从头开始分析,
当n=1时,f(1)=1;
当n=2时,f(2)=2;
当n=3时,f(3)=f(2)+f(1)=3;
当n=4时,f(4)=f(3)+f(2)=5;
...
于是可以采用迭代的思想,给定一个数组,累加即可。
(1)动态开辟空间的方式

class Solution {
public:
    /**
     * 
     * @param n int整型 
     * @return int整型
     */
    int climbStairs(int n) {
        // write code here
        int res;
        int* parr=(int*)malloc(n*sizeof(int));
        if(parr!=NULL)
        {
            *(parr)=1;
            *(parr+1)=2;
           for(int i=2;i<n;i++)
           {
               *(parr+i)=*(parr+(i-1))+*(parr+(i-2));
           }
        }
        res=*(parr+(n-1));
        free(parr);
        parr=NULL;
        return res;
    }
};

(2)使用vector容器

class Solution {
public:
    /**
     * 
     * @param n int整型 
     * @return int整型
     */
    int climbStairs(int n) {
        // write code here
        vector<int> dp(n+1,0);
        dp[0]=0;
        dp[1]=1;
        dp[2]=2;
        for(int i=3;i<=n;i++)
        {
            dp[i]=dp[i-1]+dp[i-2];
        }
        return dp[n];
    }
};
牛客刷题记录 文章被收录于专栏

记录自己的刷题记录,刷过的题的解法

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务