题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
解法:
如果这道题用的是递归的话,会导致超时
正确的做法是
最后一步一定是迈1步或者迈2步,那么可以通过最后一步往前推,整个过程每一步可以简写成f(x) = f(x-1) + f(x-2)
那么可以使用动态规划,加入一个数组,记录每一个阶梯的走法总数
但是这样会浪费n的空间
通过观察发现每次只需要使用前2步的结果,因此可以进一步优化
class Solution {
public:
int numWays(int n) {
int jump_count = 0;
int f[2] = {1, 1};
if(n == 0 || n == 1)
{
return 1;
}
for(int i = 2; i <= n; i++)
{
jump_count = (f[0] + f[1])%1000000007;
f[0] = f[1];
f[1] = jump_count;
}
return jump_count;
}
};