一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路如下
每次有两种跳法,如果第一次跳1级,则剩下n-1级,跳法为F(n-1)
如果第一次跳2级,则剩下n-2级,跳法为F(n-2),则总跳法F(n) = F(n-1) + F(n-2),其实就是一个斐波那契数列
F(1) = 1;
F(2) = 2;
F(n) = F(n-1) + F(n-2) (n>2)
类似上一题斐波那契数列,有三种解法,代码如下:
class Solution {
public:
//方法一:递归
int fib(int n){
if(1 == n || 2 == n)
{
return n;
}
return fib(n-1) + fib(n-2);
}
//方法二:动态规划
int fib1(int n){
int a[100] = {0};
a[0] = 0;
a[1] = 1;
a[2] = 2;
for(int i = 3; i <= n; i++){
a[i] = a[i-1] + a[i-2];
}
return a[n];
}
//方法三:类似动态规划 但只保留当前值cur 和前一个值pre
int fib2(int n){
if(1 == n || 2 == n)
{
return n;
}
int pre = 1;
int cur = 2;
for(int i = 3; i <=n; i++){
cur = pre + cur;
pre = cur - pre;
}
return cur;
}
int jumpFloor(int number) {
return fib2(number);
}
};