算法 跳台阶基础版、改进版(不能连续跳2阶)
@author:Jingdai
@date:2020.11.15
跳台阶(青蛙跳)是一个非常经典的算法问题,前几天看面试题看到一个跳台阶的改进版(不能连续跳2个台阶),现总结一下。
在介绍改进版解法之前先复习一下基础版,不想看的可以直接跳到改进版部分。
基础版
题目描述
有一个 n 阶的楼梯,你从最下面往上跳,每次可以跳1阶或2阶,有多少种方法可以跳到楼顶?
思路及代码
这个基础版很简单,对于第 n 阶,你只有两种方式跳上去:
- 从 n-1 阶跳1阶跳上去
- 从 n-2 阶跳2阶跳上去
所以就可以得到递推式:
然后可以利用递归方式求解或利用dp方式求解。看下面的代码:
递归方式(不推荐,复杂度高,n较大时容易超时)
public int jumpStairs(int n) { if (n <= 3) return n; return jumpStairs(n-1) + jumpStairs(n-2); }
dp方式
public int jumpStairs(int n) { if (n <= 3) return n; int[] dp = new int[n]; for (int i = 0; i < n; i++) { if (i <= 2) { dp[i] = i