三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007
这题是之前每次可以爬两层的升级版
很明显若到达第 i 阶,可能的结果是从 i - 3, i - 2, i - 1,这三层台阶过来的,因此我们只需要将这三种情况的可能加起来就好了。
还有就是我们需要开一个long数组,否则会发生越界。
class Solution {
public int waysToStep(int n) {
if(n == 1) return 1;
if(n == 2) return 2;
long[] f = new long[n + 1];
f[0] = 1;
f[1] = 1;
f[2] = 2;
for(int i = 3;i <= n; i++){
f[i] = (f[i - 1] + f[i - 2] + f[i - 3]) % 1000000007;
}
return (int)f[n];
}
}