欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(C++)剑指offer-10:矩形覆盖(递归和循环)

程序员文章站 2024-03-18 08:54:10
...

剑指offer-10:矩形覆盖(递归和循环)

目录

1问题描述

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
(C++)剑指offer-10:矩形覆盖(递归和循环)

2问题分析

(C++)剑指offer-10:矩形覆盖(递归和循环)
(C++)剑指offer-10:矩形覆盖(递归和循环)
(C++)剑指offer-10:矩形覆盖(递归和循环)
(C++)剑指offer-10:矩形覆盖(递归和循环)

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

3答案

递归实现

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

循环迭代实现

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

        int f1=1,f2=2;
        while(number-- >2){
            f2=f1+f2;
            f1=f2-f1;
        }
        return f2;
    }
};