概述
题目链接
题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2
输出:2示例 2:
输入:n = 7 输出:21示例 3:
输入:n = 0 输出:1
设跳上 n 级台阶有 f(n) 种跳法。跳到第 n 级有两种情况,
- 从第 n-1 级台阶跳上来 跳到第 n-1 级台阶有 f(n-1) 种跳法
- 从第 n-2 级台阶跳上来 跳到第 n-2 级台阶有 f(n-2) 种跳法
*f(n)*为以上两种情况之和,即 f(n)=f(n−1)+f(n−2),这就与斐波那契数列的转态转移方程相同了。所以可转化为 求斐波那契数列第 n 项的值 ,与 剑指 Offer 10- I. 斐波那契数列做法相同,只是起始数字不同。
由 F(N) = F(N - 1) + F(N - 2) 可知, 只需三个变量, 即可完成迭代求解. 迭代求解的过程 相当于将这三个数每次向后平移一个位置,
0 | 1 | 1 | 2 | 3 | 5 |
---|---|---|---|---|---|
res | a1 | a2 | |||
res | a1 | a2 | |||
res | a1 | a2 |
int numWays(int n) {
int res = 1, a1 = 1, a2 = 0;
for(int i = 0; i < n; ++i){
a2 = (res + a1) % 1000000007;
res = a1;
a1 = a2;
}
return res;
}
最后
以上就是勤劳八宝粥为你收集整理的剑指 Offer 10- II. 青蛙跳台阶问题 C++的全部内容,希望文章能够帮你解决剑指 Offer 10- II. 青蛙跳台阶问题 C++所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复