题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例
输入:n = 2
输出:2
思路
- 每次只能跳1级或者2级,那么在最后一次的时候,就有两种可能,跳1级或者2级到顶,那么假设跳n级一共有F(N)种可能
- 如果最后一次加入跳1级,那剩下的N-1级就有F(N-1)种可能;如果最后一次加入跳2级,那剩下的N-2级就有F(N-2)种可能;
- 那么就可得,F(N)=F(N - 1)+F(N - 2),等价于斐波那契数列的问题
- 但是在开始的时候是有区别的,当N=0时,F(0)=1;当N=1时,F(1)=1;当N=2时,F(2)=2;
1. 递归
public class Solution {
public int numWays(int n) {
if (n <= 1) {
return 1;
}
return (numWays(n - 1) % 1000000007 + numWays(n - 2) % 1000000007) % 1000000007;
}
}
2. 动态规划
public class Solution {
public int numWays(int n) {
if (n <= 1) {
return 1;
}
int firstNum = 1;
int secondNum = 1;
int thirdNum;
for (int i = 0; i < n; i++) {
thirdNum = (firstNum + secondNum) % 1000000007;
firstNum = secondNum;
secondNum = thirdNum;
}
return firstNum;
}
}