算法

[LeetCode OJ]- Climbing Stairs

2017-03-21  本文已影响0人  其中一个cc

题目要求:爬楼梯可以一次爬一阶或者一次爬两阶,求爬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】;

代码如下。

两种爬法的 三种爬法的 主函数

运行结果为:

上一篇下一篇

猜你喜欢

热点阅读