时间复杂度为O(1)的跳台阶

题目描述:假设有一个n级的台阶,每次可以向上跳一级,两级,三级…N级。问一共有多少中跳法呢?

分析:这是一道典型的动态规划的题目,我们可以这样想,我们最后一步可以跳1级,也可以跳2级,跳三级…跳N级,我们用最后一步跳一级来举例子,假设最后一步跳1级,那还剩下n-1个台阶,又可以分为最后一步跳1级,2级…直到n-1级。 好啦,就分析到这里,我们可以看到当我们最后一步跳一级的时候,剩下的n-1级台阶又是一个同样的范围缩小的子问题,我们当然可以使用递归来做,最好构件一个辅助数组,可以节省大量的运算量。

接下来讲解我的代码:

我以n = 3 时举例:

只有 1 级台阶 : 只有1 种 跳法;

只有 2 级台阶 : 有 2 中跳法;

当有 3 级台阶时: 我们要分为三种情况

                       (1) 最后一步跳一级 , 剩下2级,即再跳个2级的就可以了

                       (2) 最后一步跳两级 , 剩下1级,即再跳个1级的就可以了

                       (3) 最后一步跳三级,  没台阶了,一步到位即 算 1 中方法

算法已经很清楚了

f(1) = 1

f(2) = 2

f(3) = f(2) + f(1) + 1 = 4

f(4) = f(3) + f(2) + f(1) + 1 = 8

其实呢,这是个公比为2,首项为1的等比数列;

所以第n项的值是 f(n) = a1 * q^(n-1)

所以我们可以使用移位来运算,将1向左移位,每移1位,就相当于乘2,刚好数列符合公式。
时间复杂度为O(1)的跳台阶
作者:时光凉啦啦啦啦啦
https://www.bilibili.com/read/cv2394003
出处: bilibili