Climbing Stairs
来源:互联网 发布:洛克人网络争霸战ed 编辑:程序博客网 时间:2024/06/11 06:59
https://leetcode.com/problems/climbing-stairs/
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
题意:告诉你有n级台阶,每次只能爬一阶或两阶,问共有多少种方法到顶端
思路:第i到第j阶的方法种数依赖于第i+1到第j和第i+2到第j,所以这是一题动态规划,dp(int p,int q)表示第p到第q阶台阶的解法,可以得出dp(p,q)=dp(p+1,q)+dp(p+2,q),一旦p==q||p-q==1的时候表示能够到达或者再走一步就能到达,所以这时候结束递归,表示这是一种解法成功了,所以返回1。由于递归过程中会重复调用一些已经计算过的过程,所以每次返回当前解之前把结果保存起来,如果下次需要用到就直接返回结果。
实现:
public class Solution { int[][] a; int n; public int climbStairs( int n) { this. n= n; a= new int [n +1][n +1];//用于保存p到q级台阶的结果 return dp(0,n ); } public int dp(int p , int q){ //用来计算p到q的方法种数 if( p<0|| q> n|| q==0) return 0; if( a[ p][ q]!=0) //如果结果集中已经存在这个结果,就直接返回 return a [p ][q ]; if( q- p==1|| q== p) //只差一阶或相等的情况,表示当前方法可以到达 return 1; a[ p][ q]=dp( p+1, q)+dp( p+2, q); //第p到第q阶的方法种数依赖于第p+1到第q和第p+2到第q,并且把结果保存起来 return a[ p][ q]; }}
0 0
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Climbing Stairs
- Eclipse利用HttpClient 写post和get连接到后台
- 520B. Two Buttons【这题好魔性 greedy 反推】
- 矩阵翻转 贪心 水题
- HashMap遍历的方式,推荐使用entrySet()
- Python设计模式——适配器模式
- Climbing Stairs
- Cpp的Class和Object-笔记
- 网站工作日记之:p2p平台的筹备搭建
- PHPMailer发送中文名称附件
- hibernate主键生成策略详解<generator>
- Servlet返回JSON格式数据
- sql问题总结1
- 产品经理如何做好行业研究及竞争对手分析工作 (转)
- 【bestcoder #32】 ABCD题解