青蛙跳台阶

scorlw 发布于

青蛙跳台阶

关键词:递归、斐波那契数列

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

1
2
输入:n = 2
输出:2

示例2:

1
2
输入:n = 7
输出:21

思路

思路一:

因为每次只能跳1or2,所以n阶的方式F(n) = F(n-1) + F(n-2),本质上就是个斐波那契数列。

思路二:

可以采用数组的方式来进行计算(可能省时间?)

代码

思路一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
int numWays(int n) {
if(n <= 1) return 1;
if(n == 2) return 2;
int j = 1;
int k = 2;
for(int i = 0; i < n - 2; i++){
int temp = k;
k += j;
j = temp;
if(k > 1000000007) k = k % 1000000007;
}
return k;
}
};

思路二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
int numWays(int n) {
if(n <= 1) return 1;
int dp[n+1];
dp[0] = 1;
dp[1] = 1;
//dp[2] = 2;

for(int i = 2; i < n+1; i++){
dp[i] = (dp[i-1] + dp[i-2])%1000000007;
}
return dp[n];
}
};

知识点

  1. 递归
  2. 斐波那契数列
  3. 数组与递归