题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
解题思路
- 首先定义一个数组记录那些需要重复计算的值
- 然后找出数组之间的关系式
- 找出初始条件
代码实现
解法1
//时间复杂度O(n),空间复杂度O(n)
int numWays(int n)
{
if(n<=1)
return n;
int dp[n+1]; // 定义一个数组记录重复使用的数据
dp[0]=1;//初始条件
dp[1]=1;
for(int i=2;i<=n;i++) // 通过关系式来计算出 dp[n]
{
dp[i]=(dp[i-1]+dp[i-2])%1000000007;
}
return dp[n];
}
dp[0]=1是为了初始化需要。
解法2
//空间优化为O(1)
class Solution {
public:
int numWays(int n) {
if(n<1) return 1;
int dp0=1,dp1=1;
for(int i=2;i<=n;i++)
{
int temp=(dp0+dp1)%1000000007;
dp0=dp1%1000000007;
dp1=temp%1000000007;
}
return dp1;
}
};