剑指offer(10):矩形覆盖问题

来源:互联网 发布:脂本 知乎 编辑:程序博客网 时间:2024/05/22 13:42

问题描述:

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

分析:
用第1个小矩形覆盖时,有两种方式:横放或者竖放。横放时,后面的方法还有f(n1);竖放时后面的方法还有f(n2)。因此n个小矩形组成的大矩形被覆盖的总方法为f(n)=f(n1)+f(n2)。此处f(1)=1,f(2)=2,根据测试用例和输出判断f(0)=1。因此该问题也是斐波那契数列。

矩形覆盖问题

牛客AC代码:

public class Solution {    public int RectCover(int target) {        if(target <= 0)            return 1;        if(target <= 2)            return target;        int f1 = 1;        int f2 = 2;        int fn = 0;        for(int i = 3; i <= target; i++) {            fn = f1 + f2;            f1 = f2;            f2 = fn;        }        return fn;    }}

参考
1. 何海涛,剑指offer名企面试官精讲典型编程题(纪念版),电子工业出版社

0 0
原创粉丝点击