一.问题描述
三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。
示例1.
输入:n = 3
输出:4
说明: 有四种走法
示例2.
输入:n = 5
输出:13
提示:1.n范围在[1,1000000]之间
二.解题思路
从题目描述中看,小孩一次可以上1阶、2阶、3阶。如果现在楼梯只有一阶,那么只有1种,如果是2阶,有3种(直接上两阶或者上两次1阶),如果是3阶,有4种(直接上3阶,上一次1阶一次2阶,一次2阶一次1阶,上三次1阶),所以上i阶共有:
- 从i-3阶走3阶
- 从i-2阶走2阶
- 从i-1阶走1阶
那么i阶就是i-3阶、i-2阶、i-1阶的阶数之和,那么就是dp[i]=dp[i-3]+dp[i-2]+dp[i-1];考虑到结构只收到三个数值的影响,就用三个数组代替n维数组
class Solution { public int waysToStep(int n) { int m=1000000007; if(n==1) return 1; if(n==2) return 2; if(n==3) return 4; int sum=0; int first=1; int second=2; int three=4; for(int i=4;i<=n;i++){ sum=((three+first)%m+second)%m; first=second; second=three; three=sum; } return sum; }}
三.总结
每一次的总结都是对自己的赞美。嗖嗖
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情