三步问题

此博客链接:https://www.cnblogs.com/ping2yingshi/p/13743120.html

三步问题

题目链接:https://leetcode-cn.com/problems/three-steps-problem-lcci/submissions/

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

示例1:

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

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

n范围在[1, 1000000]之间

题解:

        思路:和爬楼梯的思路是一样的,到达第n阶台阶可以由第n-1阶台阶,第n-2阶台阶,第n-3阶台阶,设f(n)为第到达第n阶台阶的 总走法,所以f(n)=f(n-1)+f(n-2)+f(n-3),当n=1,n=2,n=3不满足这个公式,我们从题目中可以知道,n=1时,有一种走法,n=2时有两种走法,n=3时,有4种走法, 

代码如下:

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

    }
}

 

posted @ 2020-09-28 09:20  萍2樱释  阅读(182)  评论(0编辑  收藏  举报