LeetCode 70: subir escaleras

Usted está subiendo una escalera. Se necesita n pasos para llegar a la cima.

Cada vez que se puede subir 1 o 2 pasos. ¿De cuántas maneras distintas se puede subir a la cima?

Nota: Dado n será un número entero positivo.

Ejemplo 1:

Entrada: 2
de salida: 2
Explicación: Hay dos maneras para subir a la cima.

  1. 1 paso + 1 paso
  2. 2 pasos
    Ejemplo 2:

ENTRADA :. 3
la salida :. 3
Explicación: Hay tres formas de subir a la cima.
3. PASO + 1. 1. 1 + paso a paso.
4. PASO 1 + 2 pasos.
5. La Pasos + 1 PASO 2.
Esta es una escalera de problemas, su 18 años encontradas durante el mijo entrevista, al escuchar esta pregunta cuando el entrevistador dijo, con una expresión de su propia fuerza de ignorante, el entrevistador luego terminó sus propias ideas para resolver problemas fue un poco de caída de ayer en la parte posterior del tren a Beijing esta pregunta se ve hoy grabarlo.
El problema con el hecho de que el número de columnas es muy similar a la de Fibonacci de obra, suponiendo que hay escalera de n niveles, cómo subir la capa n, es porque sólo se puede subir uno o dos pasos, luego subió al método de capa n sea desde la capa n-1, un paso hacia arriba, o bien de la capa n-2 2 pasos arriba, por lo que es muy fácil de fórmulas de recursión elaborados: dp [n] = dp [ n-1] + dp [n- 2].
Solución de Java uno:

public static int climbStairs(int n) {
        if (n == 1) {
            return 1;
        }
        int dynamicArray[] = new int[n + 1];
        dynamicArray[1] = 1;
        dynamicArray[2] = 2;
        for (int i = 3; i <= n; i++) {
            dynamicArray[i] = dynamicArray[i - 1] + dynamicArray[i - 2];
        }

        return dynamicArray[n];
    }

Podemos además a optimizar el espacio, con sólo dos variables enteras A y B para los valores de proceso tienda, un primer valor asignado a b + b, a y b asignada a la original, por lo que debe ser asignado a ba. Esto simula el proceso de acumulación anterior, en lugar de almacenar todos los valores, ver el código es el siguiente:
la solución Java 2:

public class Solution {
    public int climbStairs(int n) {
        int a = 1, b = 1;
        while (n-- > 0) {
            b += a; 
            a = b - a;
        }
        return a;
    }
}

o

 public static int climbStairs4(int n) {
            int a = 1, b = 1;
            while (--n > 0) {
                b += a;
                a = b - a;
            }
            return b;
        }

Por supuesto, el uso de una gran variedad de métodos para hacer caché
de Java Solución 3

public class ClimbingStairs {

    public static int climbStairsWithRecursionMemory(int n) {
        int[] memoryArray = new int[n + 1];
        return subClimbStairsWithRecursionMemory(n - 1, memoryArray) + subClimbStairsWithRecursionMemory(n - 2, memoryArray);

    }

    public static int subClimbStairsWithRecursionMemory(int n, int[] memoryArray) {
        if (n == 1) {
            return 1;
        } else if (n == 2) {
            return 2;
        } else {
            if (memoryArray[n] > 0) {
                return memoryArray[n];
            }
            memoryArray[n] = subClimbStairsWithRecursionMemory(n - 1, memoryArray) + subClimbStairsWithRecursionMemory(n - 2, memoryArray);

            return memoryArray[n];
        }
    }
}

También hay otros métodos
, consulte el artículo algoritmo: subir escaleras (escaleras) 6 tipos de solución
70. Subir escaleras que suben escaleras problema
https://leetcode.com/problems/climbing-stairs/solution/

Publicado 80 artículos originales · ganado elogios 140 · vistas 640 000 +

Supongo que te gusta

Origin blog.csdn.net/linjpg/article/details/104754312
Recomendado
Clasificación