矩形覆盖

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

这是一道斐波那契类型的题目

n=1 f(n)=1

n=2 f(n)=2

n=3 横着摆

微笑微笑 
   

此时下面两空摆法也相应确定,所以剩下来f(3-2)

竖着

微笑  
微笑  

此时,剩下来f(3-1)种摆

即f(3)=f(3-1)+f(3-2)

n=n时,f(n)=f(n-1)+f(n-2)

递归代码如下:


     int RectCover(int number) {
      if(number  <= 1){
            return 1;
        }
        if(number == 2){
            return 2;
        }
        return rectCover(number-1)+rectCover(number-2);} 
迭代代码如下:
    int rectCover(int number) {
        if (number <= 0) {
            return number;
        }
        int step_vertical= 1;//2*1的竖着摆,占用一个2*1
        int step_acorss = 2;//横着摆,下面的空也明确只有一种摆法
        int step;//总的摆法
         
        for (int i = 3; i <= number; i++) {
            step = step_vertical + step_across;
            step_vertical =step_across;//前一步的横摆成为下一步的竖摆方法数
            step_across = step;前一步的方法数成为下一步的横摆方法数
        }
        return step;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值