题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
(暴力枚举) $O(n^2)$
按照分析,
1. 如果是两种跳法,第一次跳的是1阶。剩下的n-1阶跳法是f(n-1)。
2. 如果第一次跳的是2阶,剩下的n-2就是f(n-2)。
3. 故总的为f(n)=f(n-1)+f(n-2)
4. 所以其实是一个斐波那契数列。
C++ 代码
class Solution {
public:
int jumpFloor(int n) {
if(n == 0 || n == 1)
{
return 1;
}
else
{
return jumpFloor(n-1)+jumpFloor(n-2);
}
}
};
迭代方法
class Solution {
public:
int numWays(int n) {
if (n <= 1) {
return 1;
}
int a = 1;
int b = 1;
for(int i = 2; i <= n; i++) {
int tmp = b;
b = (a + b) % 1000000007;
a = tmp;
}
return b;
}
}
};
会爆栈哦!
更新了迭代的做法