Notas de pincel (ocho) -tapa rectangular

Notas de pincel (ocho) -tapa rectangular

Descripción del título

Podemos usar 2 * 1 rectángulos pequeños para cubrir rectángulos más grandes horizontal o verticalmente. ¿Cuántos métodos hay para cubrir un rectángulo grande de 2 * n con n rectángulos pequeños de 2 * 1 sin superponerse?

Por ejemplo, cuando n = 3, 2 * 3 bloques rectangulares tienen 3 tipos de métodos de cobertura:

Ideas:

Hay 1 especie cuando n = 1, 2 especies cuando n = 2 y 3 especies cuando n = 3. Considere n = 4, se puede dividir en 2,2; 1,3; 3,1 tiene 7 tipos

La primera idea es dividir: cuando n = 5, se divide en 1,4; 4,1; 2,3; 3,2; y 1,4 y 4,1 tienen el mismo número de tipos, encuentre un tipo * 2 Eso es todo Más tarde se descubrió que cuando 4 se dividía en 4 rectángulos pequeños que eran verticales, esta situación se repetía. Entonces dibujé algunas más y descubrí que había demasiadas repeticiones. Este tipo de pensamiento era casi imposible.

Cambie la forma de pensar: el último rectángulo pequeño que desea colocar hacia atrás tiene dos situaciones: una se coloca verticalmente y la otra horizontalmente. Debe haber un pequeño rectángulo acostado horizontalmente debajo.

Por lo tanto, hay f (n-1) yf (n-2) en estas dos situaciones, y se siente muy familiar. ¡Es Fibonacci!

class Solution {
public:
    int rectCover(int number) {
        if(number==0)
            return 0;
        else if(number==1)
            return 1;
        else if(number==2)
            return 2;
        else
        {
            number--;
            int a[2]={1,2};
            while(number-1!=0)
            {
                int temp=a[1];
                a[1]=a[0]+a[1];
                a[0]=temp;
                number--;
            }
            return a[1];
        }
    }
};

 

Publicado 36 artículos originales · 19 alabanzas · 20,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/GJ_007/article/details/105412613
Recomendado
Clasificación