• 10-04 矩形覆盖(斐波那契数列的应用)


    题目描述: 

    我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

    解题思路与代码:

    1) 排列组合:

    class Solution {
    public:
        int rectCover(int number) {
            if(number<=0) return 0; //没有,会报错。因为f(0)=1.(也进入了循环)
            int count = 0;
            for(int two = 0;two<= (number/2);two ++){ //two(y):每行横着放置的小块数目
                count += com(number-two,two);
            }
            return count;
        }
        
        int com(int m,int n){  //计算C(n-y,y)
            int i = m; 
            int sum=1;
            for(int j = 0;j < n;j++,i--){
                sum = sum *i / (j+1);        // m/1    (m-1)/2    (m-2)/3   ...   (m-n+1)/n
            }
            return sum;
        }
    };
    

    2)当n>2时,用第一个2*1的小矩形去覆盖大矩形的最左侧,有两种选择,竖着放或者横着放。

    竖着放时,右边还剩下2*(n-1)的区域,覆盖的方法同f(n-1)相同。

    横着放时,其下面也必须横着放,此时右边还剩下2*(n-2)的区域,覆盖方法同(n-2)相同。

    n<=0,f(n)=0;

    n=1,f(1)=1;

    n=2,f(2)=2;

    class Solution {
    public:
        int rectCover(int number) {
            if(number<=0)return 0;
            if(number==1)return 1;
            if(number==2)return 2;
            long long numRes = 2;
            long long temp = 1;
            for(int i = 3;i<=number;i++){
                numRes = numRes + temp;
                temp = numRes - temp;
            }
            return numRes;
        }
    };
    

      

  • 相关阅读:
    Java8常用新特性实践
    Presto集群部署
    Exception: Unexpected End Of File(crontab)
    centos6环境下使用yum安装Ambari
    pyspark进行词频统计并返回topN
    七行代码开始flask
    hibernate初步4
    java四大域总结
    servlet中的转发和重定向问题
    一个web页面的访问的过程
  • 原文地址:https://www.cnblogs.com/GuoXinxin/p/10407275.html
Copyright © 2020-2023  润新知