码迷,mamicode.com
首页 > 其他好文 > 详细

(原)剑指offer跳台阶和矩形覆盖

时间:2015-05-26 20:34:18      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

跳台阶
  • 时间限制:1秒空间限制:32768K

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
 
分析同样为斐波那契数列边形这样的题肯定有公式
设n级台阶,总跳法 jumps
n      jumps
1       1
2       2
3       3
4       5
5       8
猜测 fbonicc(n) = fbonicc(n-1) + fbonicc(n-2)
3        4          5
111      1111        1111(1)
21        211          211(1)
12        121         121(1)
        112         112(1)
        22          22(1)
                   111(2)
                   21(2)
                   12(2)
现在我们可以这样理解当   f(n) 比 f(n-1)少一个台阶
这一个台阶我们可以当一步跳完,也可以与前面的一步结合成一次跳两阶,So
前一种情况我们可以直接把这一步添到f(n-1)所有跳数后面,后一种情况很显然我们要向f(n - 1)借一步,也就是f(n-2)
所以得f(n) = f(n-1) + f(n-2)
 
c++代码实现
class Solution {
public:
  int jumpFloor(int number) {
    long long fiboncciA = 1;
        long long fiboncciB = 2;
        if (number == 1){
            return fiboncciA;
        }
        if (number == 2) {
            return fiboncciB;
        }
         
        int i;
        for (i = 3; i <= number; i++){
            int tmp = fiboncciB;
            fiboncciB = fiboncciA + fiboncciB;
            fiboncciA = tmp;
        }
        return fiboncciB;
  }
};

 

下一题

 

  • 时间限制:1秒空间限制:32768K
  • 题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
!!猛一看这道题有点没看懂
 
先来仔细分析一下
1:所有小矩形都竖着覆盖
2:当矩形横着覆盖时都是成对出现的
看到这里有感觉很熟悉,这不就是跳台阶问题吗?答案:是的
我们可以把题目改一下:有n个小矩形,去覆盖大矩形你可以一次用一个,也可以一次用两个,总共有多少种覆盖方法。
现在可以看懂了吧!
 
c++代码实现
代码同上
 
 

(原)剑指offer跳台阶和矩形覆盖

标签:

原文地址:http://www.cnblogs.com/code-changeworld/p/4531367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!