我是靠谱客的博主 魁梧小天鹅,最近开发中收集的这篇文章主要介绍【剑指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);
于是此问题转换为求斐波那契数列问题。

代码

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. 青蛙跳台阶问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部