zoukankan      html  css  js  c++  java
  • 剑指offer(9):斐波那契数列--矩形覆盖

    题目描述

    我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
     
    比如n=3时,2*3的矩形块有3种覆盖方法:
    写出数列后,我们发现这仍然是一个斐波那契问题,递归公式为
              n             n<=3
    f(n)     
           f(n-1)+f(n-2)     n>3
    解析,对于一个1*2的小矩形,我们可以竖着放,那剩下的2*(n-1)大矩形有  f(n-1)种覆盖方法
    如果横着放,那么下边也只能横着放,那么剩下的2*(n-2)大矩形有  f(n-2)种覆盖方法
    递归求解:
    class Solution {
    public:
        int rectCover(int number) {
            if(number<3)
                return number;
            else
                return rectCover(number-1)+rectCover(number-2);
        }
    };

    非递归求解:

    public class Solution {
        public int RectCover(int target) {
            int r1 = 1;
            int r2 = 2;
            int r3 = target;
            for(int i=3;i<=target;i++){
                r3 = r1 + r2;
                r1 = r2;
                r2 = r3;
            }
            return r3;
        }
    }
  • 相关阅读:
    grep
    [NOI2009]植物大战僵尸
    sed
    YY的GCD
    awk
    CF1100E
    cat
    tac
    [学习笔记]基数排序
    more
  • 原文地址:https://www.cnblogs.com/ttzz/p/13702630.html
Copyright © 2011-2022 走看看