美文网首页
剑指offer--10. 矩形覆盖

剑指offer--10. 矩形覆盖

作者: yui_blacks | 来源:发表于2018-11-23 19:21 被阅读0次

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

    思路:
    n <= 0,则返回0;
    n = 1,则返回1;
    n = 2,则返回2;
    n > 2,则f(n) = f(n - 1) + f(n - 2),斐波那契数列
    具体如下两图:

    第一个小矩形为2*1,则剩下的覆盖方法为:f(n - 1)

    第一个小矩形为2*1

    第一个小矩形为1*2,则剩下的覆盖方法为:f(n - 2),因为打x号的两个方格确定

    第一个小矩形为2*1

    所以总的覆盖方法为:f(n) = f(n - 1) + f(n - 2)

    public class Solution {
        public int RectCover(int target) {
            if(target <= 0)
                return 0;
            if(target == 1)
                return 1;
            if(target == 2)
                return 2;
            int[] f = new int[2];
            f[0] = 1;
            f[1] = 2;
            while(target > 2){
                int temp = f[0] + f[1];
                f[0] = f[1];
                f[1] = temp;
                target--;
            }
            return f[1];
        }
    }
    

    相关文章

      网友评论

          本文标题:剑指offer--10. 矩形覆盖

          本文链接:https://www.haomeiwen.com/subject/bhlsqqtx.html