[Deslizar el banco de preguntas] Sword se refiere a las preguntas de programación de Offer_, pasos de salto y pasos de salto anormales.

Aumentar

Descripción del Título

Una rana puede saltar un paso a la vez o hasta dos pasos a la vez. Encuentre el número total de métodos de salto para que la rana salte en un paso de n niveles (un orden diferente cuenta como resultados diferentes).

Límite de tiempo: 1 segundo Límite de espacio: 32768K Índice de calor: 475919

Puntos de conocimiento de esta pregunta:  recursividad

 

solución:

Numero de pasos

0

1

2

3

4

5

6

7

8

9

Método de salto

0

1

2

3

5

8

13

21

34

55

Al ver la secuencia de este conjunto de números, podemos ver que en realidad es una secuencia de Fibonacci con 3 pasos, que es la suma de los dos primeros elementos.

Solución uno: método recursivo

function jumpFloor(number)
{
    // write code here
    if(number == 0) return 0;
    if(number == 1) return 1;
    if(number == 2) return 2;
    
    return jumpFloor(number - 1) + jumpFloor(number -2);
}

Complejidad de tiempo: O (N ^ 2)

Complejidad espacial: O (N)

 

Solución 2: Método de matriz

Dado que la complejidad de tiempo del método recursivo es demasiado alta, también podríamos probar el método de matriz.

function jumpFloor(number)
{
    var array = [];
    array[0] = 0;
    array[1] = 1;
    array[2] = 2;
    
    for(var i = 3; i <= number; i++){
        array[i] = array[i - 1] + array[i - 2];
    }
    return array[number];
}

Complejidad de tiempo: O (N)

Complejidad espacial: O (N)

Solución dos: método variable

La matriz que definimos crea un gran espacio, por lo que usamos almacenamiento variable para optimizar el código.

function jumpFloor(number)
{
    if(number == 0) return 0;
    if(number == 1) return 1;
    if(number == 2) return 2;
    
    var one = 1;
    var two = 2;
    var sum = 0;
    for(var i = 2;i < number; i++){
        sum = two + one;
        one = two;
        two = sum;
    }
    return sum;
}

Complejidad de tiempo: O (N)

Complejidad espacial: O (1) (se crean cuatro objetos, que son constantes, por lo que se pueden ignorar)

 

Salto anormal

Descripción del Título

Una rana puede saltar un paso a la vez o hasta dos pasos a la vez. Encuentre el número total de métodos de salto para que la rana salte en un paso de n niveles (un orden diferente cuenta como resultados diferentes).

Límite de tiempo: 1 segundo Límite de espacio: 32768K Índice de calor: 475919

Puntos de conocimiento de esta pregunta:  recursividad

 

 

Al resolver el problema, los resultados son los siguientes

 

Solución uno: pow

function jumpFloorII(number)
{
    // write code here
    if(number == 0) return 0;
    
    return Math.pow(2, number-1);
}

 

Solución 2: operación de cambio

function jumpFloorII(number)
{
    return 1<<(number-1);
}

Solución 3: operador de energía (**)

function jumpFloorII(number)
{
    return 2 ** (number-1);
}

 

Supongo que te gusta

Origin blog.csdn.net/weixin_42339197/article/details/100055106
Recomendado
Clasificación