题目要求:爬楼梯可以一次爬一阶或者一次爬两阶,求爬n阶楼梯一共有多少中爬法。
思路:算法课中老师用来举例的DP问题(非常经典!!!)
DP问题:动态规划问题,可以通过状态最优解得到全局最优解,DP问题求解的关键在于找到状态转移方程。在爬楼梯问题中,状态转移方程为
dp【n】 = dp【n - 1】+ dp【n - 2】;
这个方程的解释为:在爬第n-1层时,共有dp【n - 1】种爬法,在第n-2层时,共有dp【n - 2】种爬法,那么,在爬第n层时,我们就可以知道,要么最后一步爬了一层,要么最后一步爬了两层,也就是dp【n - 1】+dp【n - 2】就是第n层的爬法。
同理,如果爬楼梯有三种爬法,一步爬1层、一步爬2层、一步爬3层,那么状态转移方程为:
dp【n】 = dp【n - 1】+ dp【n - 2】+ dp【n - 3】;
代码如下。
运行结果为: