题目描述
有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为了防止溢出,请将结果Mod 1000000007
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。
测试样例:
1
返回:1
代码如下:
1 2 3 4 //对于上k级台阶,当k>3时,由于每次可以上1,2,3级,则最后一次应该是上1,2,3中的一个 5 //case1,最后一次上1级,也即前面上了k-1级,k-1级的可能情况为:A[k-1]次 6 //同理 case2,A[k-1], case3 A[k-3] 7 //从而有: A[k] = A[k-3] + A[k-2] + A[k-1] 8 class GoUpstairs { 9 public: 10 int countWays(int n) { 11 long long resMid; 12 long long frontWay[3] = { 1, 2, 4 }; 13 if (n < 4) return frontWay[n - 1]; 14 for (int i = 3; i < n; i++){ 15 long long temp = frontWay[0] + frontWay[1] + frontWay[2]; 16 frontWay[0] = frontWay[1]; 17 frontWay[1] = frontWay[2]; 18 frontWay[2] = temp; 19 if (frontWay[2] > 1000000007){ 20 frontWay[2] = frontWay[2] % 1000000007; 21 } 22 } 23 int res = frontWay[2] % 1000000007; 24 return res; 25 } 26 };
借鉴自牛客网友 原文链接:https://www.nowcoder.com/questionTerminal/7f0661ace6df48d0af3f924950d57126
原文地址:https://www.cnblogs.com/hzy1234/p/9589040.html
时间: 2024-10-13 10:18:28