classSolution{public:intnumWays(int n){//直接将每个位置都记住if(n ==0|| n ==1)return1;return(numWays[n-1]+ numWays[n-2])%1000000007;}};
方法二:使用记忆化递归法,创建一个数组,存储每一级台阶的跳法
缺点:需要O(N)的额外空间
classSolution{public:intnumWays(int n){//直接将每个位置都记住if(n ==0|| n ==1)return1;int* dp =newint[n+1];
dp[1]=1;
dp[2]=2;for(int i =3; i <= n; i++){
dp[i]=(dp[i-1]+ dp[i-2])%1000000007;}return dp[n];}};
方法三:在方法二的基础上节省空间
classSolution{public:intnumWays(int n){//直接将每个位置都记住if(n ==0|| n ==1)return1;int pre =1; cur =2;for(int i =3; i <=n; i++){int tmp =(pre + cur)%1000000007;
pre = cur;
cur = tmp;}return cur;}};
10- II. 青蛙跳台阶问题文章目录[10- II. 青蛙跳台阶问题](https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/)解题思路一一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21