算法训练——动态规划之爬楼梯问题

运筹学上有一章节专门讲动态规划的,印象比较深刻的有一道爬楼梯问题,用dp思想来解决。

【题目】大概是这样:有n级楼梯,每次只能爬1级或2级楼梯,问爬完总共有多少种方法

转化为程序描述如下:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。

【解析】

根据题目意思,我们采用逆推的形式进行推理:

        我们用f(n)表示爬完第n格楼梯的方法总数。第n格楼梯可以直接由第n-1格、第n-2格楼梯直接到达,即原题目可转化为爬完第n-1格和爬完第n-2格楼梯的方法数的总和,即f(n)=f(n-1)+f(n-2).

        往下逆推:f(n-1)=f(n-2)+f(n-3) , ...... , f(3)=f(2)+f(1)

        爬完2格楼梯有两种方法,即f(2)=2;爬完1格楼梯有一种方法,即f(1)=1.

由此我们不难给出代码:

/**
 * 动态规划之爬楼梯
 * @author jsyuger
 * 2021年11月3日
 */
public class SolutionClimbStairs {
	
	/**
	 * 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值