我是靠谱客的博主 魁梧小天鹅,这篇文章主要介绍【剑指offer】面试题10- II. 青蛙跳台阶问题,现在分享给大家,希望可以做个参考。

解题思路

把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);
于是此问题转换为求斐波那契数列问题。

代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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-内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部