青蛙跳台阶
关键词:递归、斐波那契数列
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
示例2:
思路
思路一:
因为每次只能跳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; for(int i = 2; i < n+1; i++){ dp[i] = (dp[i-1] + dp[i-2])%1000000007; } return dp[n]; } };
|
知识点
- 递归
- 斐波那契数列
- 数组与递归