Subiendo escaleras
Asumo que estás subiendo escaleras. Se necesitan n pasos para llegar a la cima del edificio.
Puedes subir 1 o 2 escalones a la vez. ¿De cuántas maneras diferentes puedes subir a la cima del edificio?
Nota: El n dado es un entero positivo.
Ejemplo 1:
Entrada: 2
Salida: 2
Explicación: Hay dos formas de subir a la cima del edificio.
- Nivel 1 + Nivel 1
- 2do orden
Ejemplo 2:
Entrada: 3
Salida: 3
Explicación: Hay tres formas de subir a la cima del edificio.
3. Nivel 1 + Nivel 1 + Nivel 1
4. Nivel 1 + Nivel 2
5. Nivel 2 + Nivel 1
De hecho, este problema es casi el mismo que la secuencia de Fibonacci. Si usa la programación dinámica, encuentre la ecuación de cambio de estado, el cálculo ascendente y la plantilla para la programación dinámica
1: Encuentre el caso base, si dp [i] = i significa que hay i maneras para el i-ésimo paso, entonces
base [1] = 1
base [2] = 2
2 dor cycle aplica la plantilla, y si (i> = 3) Hay
dp [i] = dp [i-1] + dp [i-2]
por lo que el código de programación dinámica se puede escribir de la siguiente manera:
//有多少种方式问题
public static int goUpstairs(int n)
{
//例外情况
if(n<=0)
return -1;
//开辟数组记录前面的计算,以空间换时间
int []dp = new int[n+1];
for(int i=1;i<=n;i++)
{
//base case 为1 和 2
if(i==1)
dp[i] = 1;
if(i==2)
dp[i]=2;
//
if(i>=3)
dp[i] = dp[i-1]+dp[i-2];
}
return dp[n];
}