【剑指offer】42.跳台阶扩展问题
总目录:
1.问题描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。
数据范围:1≤n≤20
进阶:空间复杂度 O(1), 时间复杂度 O(1)
2.问题分析
同普通上台阶类似,只不过状态转移方程有所变化,
f(n)=f(n-1)+f(n-2)+....+f(1),
f(n-1)=f(n-2)+f(n-3)+...+f(1),
所以f(n)=2*f(n-1),其中n>1,f(1)=1,
1递归法
2记忆搜索法
3动态规划
3.代码实例
1递归
int jumpFloorII(int number ) { if (number <= 0) { return 0; } if (number == 1) { return 1; } return 2 * jumpFloorII(number - 1); }
2记忆搜索法
在动态规划的基础上存储中间值而已
3动态规划
int jumpFloorII(int number) { if (number <= 0) { return 0; } if (number == 1) { return 1; } int pathCount = jumpFloorII(1); //依次乘2 for (int i = 1; i < number; i++) pathCount = 2 * pathCount; return pathCount; }
本文作者:OhOfCourse
本文链接:https://www.cnblogs.com/OhOfCourse/p/16906891.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步