题意描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
提示:0 <= n <= 100
示例:
示例一:
输入:n = 2
输出:2
示例二:
输入:n = 7
输出:21
解题思路:
Alice: 好熟悉的题目,F(n) = F(n-1) + F(n-2)
Bob: 这不是斐波那契数列吗
Alice: 😎😎
代码:
Python 方法二:循环
class Solution:
def numWays(self, n: int) -> int:
if n == 0:
return 1
elif n < 3:
return n
else:
prepre = 1
pre = 2
for x in range(n-2):
tmp = (pre + prepre) % 1000000007
prepre = pre
pre = tmp
return tmp % 1000000007
Java 方法二: 递归 , 超时了。
class Solution {
public int numWays(int n) {
if(n == 0){
return 1;
}else if(n < 3){
return n;
}else{
return (numWays(n-1) % 1000000007 + numWays(n-2) % 1000000007) % 1000000007;
}
}
}
Java 方法一: 循环
class Solution {
public int numWays(int n) {
if(n == 0){
return 1;
}
if(n < 3){
return n;
}else{
long ret = 0;
long pre = 2;
long prepre = 1;
for(int i=0; i<n-2; ++i){
ret = (pre + prepre) % 1000000007;
prepre = pre;
pre = ret;
}
return (int)(ret % 1000000007);
}
}
}
易错点:
- 输入为 0 时,输出是 1
总结: