数据结构与算法-跳台阶

题目链接

跳台阶

题目描述

一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

数据范围:\(1 \leq n \leq 40\)

要求:时间复杂度:\(O(n)\) ,空间复杂度: \(O(1)\)

问题分析

\(f(n)\) 表示青蛙跳上 \(n\) 级台阶的跳法数。当只有一个台阶时,即 \(n = 1\) 时,只有 1 种跳法;

\(n = 2\) 时,有 \(2\) 种跳法; 当 \(n = 3\) 时,有 \(3\) 种跳法;

\(n\) 很大时,青蛙在最后一步跳到第 \(n\) 级台阶时,有两种情况:

  1. 青蛙在第 \(n-1\) 个台阶跳一个台阶,那么青蛙完成前面 \(n-1\)个台阶,就有 \(f(n-1)\) 种跳法,这是一个子问题。
  2. 青蛙在第 \(n-2\) 个台阶跳两个台阶到第 \(n\) 个台阶,那么青蛙完成前面 \(n-2\) 个台阶,就有 \(f(n-2)\) 种情况,这又是另外一个子问题。

两个子问题构成了最终问题的解,所以当 \(n \ge 3\)时,青蛙就有 \(f(n)=f(n-1)+f(n-2)\) 种跳法。

上面的分析过程,其实我们用到了动态规划的方法,找到了状态转移方程,用数学方程表达如下:

\[f(n) = \begin{cases} 1& \text{ if } n=1 \\ 2& \text{ if } n=2 \\ f(n-1)+f(n-2)& \text{ if } n \ge 3 \end{cases} \]

上面的公式熟不熟悉,是不是跟斐波那契数列长得非常像。实现请参照 斐波那契数列

posted @ 2022-08-08 15:05  Logan_Xu  阅读(80)  评论(0编辑  收藏  举报