三步问题
此博客链接: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]; } }
出来混总是要还的