zoukankan      html  css  js  c++  java
  • 101 爬楼梯

    原题网址:https://www.lintcode.com/problem/climbing-stairs/description

    描述

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

    您在真实的面试中是否遇到过这个题?  

    样例

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

    返回 3

    标签
    动态规划(DP)
     
    思路:这道题也是用动态规划的方法来解,但区别于数字三角形和最小路径和,此题的状态转移方程没有那么明显。
     
    为了梳理思路,先列举几个n 为小数值的解。
     
    n = 1,只有一种解法;
    n = 2,有 1+1 = 2,2 = 2,两种解法;
    n = 3,有 1+1+1 = 3,1+2 = 3,2+1 =3 三种解法;
    n = 4,有 1+1+1+1 = 4,1+1+2 = 4,1+2+1 = 4,2+1+1 = 4,2+2 = 4 五种解法;
    n = 5,有 1+1+1+1+1 = 5,1+1+1+2 = 5,1+1+2+1 = 5,1+2+1+1 = 5,2+1+1+1 = 5, 1+2+2 = 5, 2+1+2 = 5, 2+2+1 = 5 八种解法;
    n = 6,同理,有13种解法,这里不再罗列。
     
    通过观察可以发现,当 n >= 3 时,n 解法个数 = n-1个数 + n-2个数。
     
    所以可以定义一个一维数组dp【n】,初始dp【0】=1,dp【1】=2。
    状态转移方程为 dp【i】= dp【i-1】+ dp【i-2】。
    最后return dp【n-1】。
     
    AC代码:
    class Solution {
    public:
        /**
         * @param n: An integer
         * @return: An integer
         */
        int climbStairs(int n) {
            // write your code here
            if (n<=0)
        {
            return 0;
        }
        if (n==1)
        {
            return 1;
        }
        vector<int> dp(n,0);
        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];
        }
    };

     蠢了,理解爬楼梯问题还有更直接的方式。

    n=1,一种;

    n=2,两种;

    n=3,三种;(要么从第1级迈上来,要么从第2级迈上来)

    n=4,五种;(要么从第2级迈上来,要么从第3级迈上来)

    ……

    n=i,要么从第 i -1 级迈上来,要么从第 i-2 级迈上来。

    所以状态转移方程一目了然,dp【i】= dp【i-1】+ dp【i-2】。

    参考:https://blog.csdn.net/Sunny_Ran/article/details/49722333    与    https://blog.csdn.net/ouyangjinbin/article/details/51083767

     关于代码实现,还可以使用递归的方式。如果嫌递归方式效率低,还可以用循环。这样不需要额外定义动态规划数组浪费空间。
     
  • 相关阅读:
    Max Sum Plus Plus HDU
    Monkey and Banana HDU
    Ignatius and the Princess IV HDU
    Extended Traffic LightOJ
    Tram POJ
    Common Subsequence HDU
    最大连续子序列 HDU
    Max Sum HDU
    畅通工程再续
    River Hopscotch POJ
  • 原文地址:https://www.cnblogs.com/Tang-tangt/p/9133650.html
Copyright © 2011-2022 走看看