【剑指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; }

浙公网安备 33010602011771号