概述
解题思路
把n级台阶时的跳法看出n的函数,记为f(n)。当n>2时,第一次跳的时候就有两种不同的选择:
一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);
二是第一次跳2级,此时跳法数目等于剩下的n-2级台阶的跳法数目,即为f(n-2.
因此,n级台阶的不同跳法的总数f(n)=f(n-1)+f(n-2);
于是此问题转换为求斐波那契数列问题。
代码
class Solution {
public:
int m = 1e9 + 7;
int numWays(int n) {
vector<int> dp(n + 1, -1);
return Ways(n, dp);
}
int Ways(int n, vector<int>& dp)
{
//递归边界
if (n == 0 || n == 1) return 1;
//状态转移方程
if (dp[n] != -1) return dp[n];
else
{
dp[n] = (Ways(n-1,dp) + Ways(n-2,dp))%m;
return dp[n];
}
}
};
最后
以上就是魁梧小天鹅为你收集整理的【剑指offer】面试题10- II. 青蛙跳台阶问题的全部内容,希望文章能够帮你解决【剑指offer】面试题10- II. 青蛙跳台阶问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复