九章算法面试题60 爬楼梯
2015-05-13 02:14
127 查看
九章算法官网-原文网址
http://www.jiuzhang.com/problem/60/题目
有n层的台阶,一开始你站在第0层,每次可以爬两层或者一层。请问爬到第n层有多少种不同的方法?Follow Up Question: 如果每次可以爬两层,和倒退一层,同一个位置不能重复走,请问爬到第n层有多少种不同的方法?
在线测试本题
http://www.lintcode.com/problem/climbing-stairs/解答
这道题属于简单的数组一维动态规划1. State:f[i] 表示爬到第i层的方法数目。
2. Function: f[i] = f[i-1] + f[i-2] 第i层的方法数目等于第i-1层数目加上第i-2层数目
3. Intialize: f[0] = 1, f[1] =1 初始化 最开始没有爬和第一层的方法数目为1.
4. Answer: f
爬到第n层有多少种不同的方法
Follow Up Question:
这道题与原来的题相比提升了一个难度,主要是倒退一层,这个地方可能会违背动态规划无后效性的原则。 那么我们要怎么转化呢?
由条件:同一个位置不能重复走。我们可以知道如果要退步的话,不能退两层以上,因为用两步退两层再一步前进两层,那就会走相同的位置。所以我们最多只能退后一步。
那么题目的条件就可以转换两种情况,
a.跳两层(前进两层)。
b.退一层跳两层 (前进一层)。
1. State:f[i][0] 表示最后一步是跳两层情况下爬到第i层的方法数目。f[i][1] 表示最后是一步是退一层跳两层的情况下爬到第i层的方法数目。
2. Function: f[i+1][1] = f[i][0] 最后一步是退一层跳两层的情况下爬到第i+1层的方法数目等于从第i层情况a的数目跳两层退一层。这里不能考虑第i层的情况b的方法数,因为第i层情况b的数目是从第i+1层退一步得到的。f[i+2][0] = f[i][0]+f[i][1] 最后一步是退一层跳两层的情况下爬到第i+2层的方法数目等于第i层所有情况跳两层。
3. Intialize: f[0][0]=1初始化最开始没有爬的方法数目为1.4. Answer: f
[0]+f
[1] 爬到第n层a、b两种不同的方法的总和
相关文章推荐
- 九章算法面试题9 前k大的和
- 九章算法面试题21 寻找最近单词对
- 九章算法面试题34 最长01子串
- 九章算法面试题44 设计一个Web Crawler
- 九章算法面试题61 克隆图
- lintcode&九章算法——Google 面试题 | 字典里面的最长单词 ? 待解决
- 九章算法面试题22 扔棋子
- 九章算法面试题36 交错的字符串
- 九章算法面试题45 寻找最大的储水容器
- 九章算法面试题62 合并k个排序数组
- 3295 落单的数 九章算法面试题
- 九章算法面试题78 有效回文串
- 九章算法面试题77 插入区间
- 九章算法面试题10 赛马问题
- 九章算法面试题23 栈上实现Min函数
- 九章算法面试题37 主元素
- 九章算法面试题46 正负交替
- 九章算法面试题63 快速幂
- 九章算法面试题73 翻转链表II
- 九章算法面试题79 寻找峰值