题目描述
有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为了防止溢出,请将结果Mod 1000000007
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。
测试样例:
1
返回:1class GoUpstairs { public: int countWays(int n) { const int m=1000000007; if(n<0) return 0; if(n>0&&n<3) return n; if (n==3) return 4; int f1=1,f2=2,f3=4,result; for(long long i=4;i<=n;++i) { result=((f1+f2)%m+f3)%m; f1=f2; f2=f3; f3=result; } return result; } };