【剑指Offer】矩形覆盖

问题描述

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。

请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,

总共有多少种方法?

解题思路

n=1 - 只有横放一个矩形一种解决办法

n=2 - 有横放一个矩形,竖放两个矩形两种解决办法

n=3 - n=2的基础上加1个横向,n=1的基础上加2个竖向

n=4 - n=3的基础上加1个横向,n=2的基础上加2个竖向

·

·

·

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

斐波那契数列变种。。。。。

代码实现

class Solution {
public:
    int rectCover(int number) {
        if (number == 0)
            return 0;
        else if(number == 1){
            return 1;
        }
        else if (number == 2){
            return 2;
        }

        return rectCover(number - 1) + rectCover(number - 2);
    }
};

发现碰到这种问题,可以通过从n=0或1开始慢慢先算几个(跟初高中找规律填数一样),来找出相连两个数或相连的几个数之间的关系。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 12:23:25

【剑指Offer】矩形覆盖的相关文章

剑指OFFER之矩形覆盖(九度OJ1390)

题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=70),其中n为偶数. 输出: 对应每个测试案例, 输出用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有的方法数. 样例输入: 4 样例输出: 5 解题思路: 观察题目中的矩形,2*n的,是个长条形.本来脑中想象的是复杂的华容道,但是既然只是简单的长条形,那么

剑指Offer:矩形覆盖【N1】

剑指Offer:矩形覆盖[N1] 题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 题目思考 我们先把2*8的覆盖方法记为f(8),用一个2*1的小矩形去覆盖大矩形的最右边时有两种选择,横着放或者竖着放, 此时左边的空间为f(6)或f(7),那么f(8)的放置结果为f(6)[右边横着放]+f(7)[右边竖着放] 找规律 f(n)=f(n-1)+f(n-2),斐波那契数列 Java题解 public clas

牛客网上的剑指offer题目

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一个字符串中的空格替换成"%20" 两种方法实现:输入一个链表,从尾到头打印链表每个节点的值 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 剑指offer 斐波那契数列 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个

剑指offer (9) 递归和迭代 斐波那契数列

通常基于递归实现的代码比基于循环实现的代码要简洁很多 比如 二叉树遍历以及 二叉树的许多操作 递归由于是函数调用自身,每一次函数调用,都需要在内存栈中分配空间以保存参数.返回地址以及临时变量 而每个进程的栈容量是有限的,当递归调用的层级太多时,就会导致 调用栈溢出 递归有时伴随大量重复的计算, 二叉树遍历的递归操作不存在重复计算,因为每个结点的左右子树是严格区分开的 例如求解 斐波那契数列: 解题分析 int fib(int n) { assert(n >= 0); int prevTwo =

【剑指Offer】文章索引(未完)

下面是牛客网剑指Offer编程题的一些解题报告,目前还没刷完,会一篇篇加上来. 跳台阶 变态跳台阶 矩形覆盖 重建二叉树 替换空格 用两个栈代替队列 斐波那契数列 二进制中 1 的个数 版权声明:本文为博主原创文章,未经博主允许不得转载.

《剑指offer》题解

有段时间准备找工作,囫囵吞枣地做了<剑指offer>提供的编程习题,下面是题解收集. 当初没写目录真是个坏习惯(-_-)||,自己写的东西都要到处找. 剑指Offer - 九度1524 - 复杂链表的复制 剑指Offer - 九度1509 - 树中两个结点的最低公共祖先 剑指Offer - 九度1508 - 把字符串转换成整数 剑指Offer - 九度1504 - 把数组排成最小的数 剑指Offer - 九度1503 - 二叉搜索树与双向链表 剑指Offer - 九度1390 - 矩形覆盖 剑

剑指offer(1~10)题解

剑指offer(1~10) 二维数组中的查找 源代码 class Solution { public: bool Find(int target, vector<vector<int> > array) { for(int i = 0 ; i < array.size() ; i ++){ for( int j = array[i].size() - 1 ; j >= 0 ; j--){ if( array[i][j] == target){ return true;

《剑指offer》全部题目-含Java实现

陆续刷了好久,算是刷完了<剑指offer>,以下全部AC代码,不一定性能最优,如有错误或更好解答,请留言区指出,大家共同交流,谢谢~ 1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. public class Solution { public boolean Find(int target, int [][] array) { if(array == n

剑指offer算法总结

剑指offer算法学习总结 节选剑指offer比较经典和巧妙的一些题目,以便复习使用.一部分题目给出了完整代码,一部分题目比较简单直接给出思路.但是不保证我说的思路都是正确的,个人对算法也不是特别在行,只不过这本书的算法多看了几遍多做了几遍多了点心得体会.于是想总结一下.如果有错误也希望能指出,谢谢. 具体代码可以参考我的GitHub仓库: https://github.com/h2pl/SwordToOffer 数论和数字规律 从1到n整数中1出现的次数 题目描述 求出1~13的整数中1出现的

剑指Offer系列之题11~题15

目录 11.矩形覆盖 12.二进制中1的个数 13. 数值的整数次方 14.调整数组顺序使奇数位于偶数前面 15.链表中倒数第k个结点 11.矩形覆盖 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 斐波那契数列的应用 第一次竖着放一块类比为走一步,第一次横着放两块类比为走两步 代码与上面的斐波那契数列类题目类似,此处不再赘述:剑指Offer系列之题6~题10. 12.