面试题 08.01. 三步问题
三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。
示例1:
输入:n = 3
输出:4
说明: 有四种走法
示例2:
输入:n = 5
输出:13
提示:
n范围在[1, 1000000]之间
思路: 知识点动态规划 坑点: 因为这能条三个台阶,所以我们的动态方程中,有三项d[i-1] + d[i-2] + d[i-3],前两项相加的时候,会存在溢出的情况,因此此时前两项也需要进行取模1000000007操作。
class Solution { public: int waysToStep(int n) { if(n == 1) return 1; if(n == 2) return 2; if(n == 3) return 4; int dp[n+1]; dp[1] = 1; dp[2] = 2; dp[3] = 4; for(int i = 4;i < n+1;i++){ dp[i] = ((dp[i - 1] + dp[i - 2])% 1000000007 + dp[i - 3]) % 1000000007; } return dp[n]; } };
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

浙公网安备 33010602011771号