zoukankan      html  css  js  c++  java
  • Leetcode 面试题 08.01. 三步问题

    三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。

    示例1:

    输入:n = 3
    输出:4
    说明: 有四种走法
    示例2:

    输入:n = 5
    输出:13
    提示:

    n范围在[1, 1000000]之间

    思路:

    这个和之前蓝桥杯爬两个台阶的比较类似

    因为三个台阶的话就是和n-1,n-2,n-3的台阶数有关系而已

    因为最后的数字太大需要取模,这一步没有看到

    正确代码:

    
    
    int waysToStep(int n){
        if(n <= 2) return n;
        if (n == 3) return 4;
        int a = 1,b=2,c=4,d;

        /*已知条件有3条,因此共循环n-3次*/
        n -= 3;
        while(n--){
            d = ((a+b)%1000000007+c)%1000000007;
            a = b;
            b = c;
            c = d;
        }
        return c;
    }
    
    

    另外一种写法是用通常用到的dp数组的方法

    int waysToStep(int n){
        if(n <= 2) return n;
        if (n == 3) return 4;
        int dp[n+1];
        dp[0]=1;
        dp[1]=2;
        dp[2]=4;
        for(int i=3;i<=n;i++)
        {
            dp[i]=(dp[i-1]+dp[i-2])%1000000007+dp[i-3];
            dp[i]%=1000000007;
        }
        return dp[n-1];
    }
    

      

    反思:

    正确理解题意即可

  • 相关阅读:
    RABC权限管理
    七牛云上传
    支付宝沙箱支付(Django端)超适合小白哦~
    ModelSerialzier + ModelViewSet基础使用
    微博三方登录
    Celery梳理
    ios 动画
    ios 贝塞尔动画
    ios 贝塞尔
    ios Masonry 开发细节
  • 原文地址:https://www.cnblogs.com/redzzy/p/13753374.html
Copyright © 2011-2022 走看看