Solicitud
- Hay n escalones en la escalera. ¿Cuántas maneras de subir las escaleras cada vez que sube uno o dos escalones?
Ejemplos
- Entrada: n = 3
- [1,1,1], [1,2,], [2,1]
- Salida: n = 3
Lograr
- De arriba hacia abajo (recursivo)
Recursivo
1 clase Solución { 2 3 privado : 4 int calcWays ( int n) { 5 6 if (n == 0 || n == 1 ) 7 return 1 ; 8 9 retorno calcWays (n- 1 ) + calcWays (n- 2 ); 10 } 11 12 público : 13 int climbStairs ( int n) { 14 15 return calcWays (n); 16 } 17 };
Búsqueda recursiva + memoria
Solución de 1 clase { 2 3 privado : 4 vector < int > memo; 5 6 int calcWays ( int n) { 7 8 if (n == 0 || n == 1 ) 9 return 1 ; 10 11 if (memo [n] == - 1 ) 12 memo [n] = calcWays (n- 1 ) + calcWays (n- 2 ); 13 14 memorando de regreso [n]; 15 } 16 17 público : 18 int climbStairs ( int n) { 19 20 memo = vector < int > (n + 1 , - 1 ); 21 retornan calcWays (n); 22 } 23 };
- De abajo hacia arriba (programación dinámica)
1 clase Solución { 2 3 público : 4 int climbStairs ( int n) { 5 6 vector < int > memo (n + 1 , - 1 ); 7 8 memo [ 0 ] = 1 ; 9 memo [ 1 ] = 1 ; 10 para ( int i = 2 ; i <= n; i ++ ) 11 memo [i] = memo [i- 1 ] + memo [i- 2 ]; 12 volver memo [n]; 13 } 14 };
Relacionados
- Triángulo 120
- 64 suma de ruta mínima