título Descripción
Supongamos que usted está subiendo escaleras. P ara que necesita para llegar al techo.
Cada vez que se puede subir uno o dos pasos. ¿De cuántas maneras se puede subir a la azotea de la misma?
Nota: Dado n es un entero positivo.
Ejemplo 1:
Entrada: 2
de salida: 2
Explicación: Hay dos métodos pueden subir el techo.
1,1 + 1-orden orden
2.2 Orden
Ejemplo 2:
Entrada: 3
Salida: 3
Explicación: Hay tres métodos pueden subir a la azotea.
1,1 + 1 + 1 fin de orden de pedido por
orden 2,1 + 2-orden
3,2 + 1-fin-fin
Fuente: estancia botón (LeetCode)
enlace: https: //leetcode-cn.com/problems/climbing-stairs
propiedad de la deducción de todas las redes. reimpresión comercial póngase en contacto con la reimpresión autorizada oficial, no comercial por favor indique la fuente.
Vernácula Título:
una capacidad limitada para poder subir una vez un paso o dos pasos, y le preguntó cuánto los de orden n método total de pasos tienen?
algoritmo:
¿Cuántos tipos de programas de muchos científicos antiguos prefieren para calcular manualmente esto, el recursivo Ye Hao lograr, ir un paso más, mira el resto de las necesidades n-1; ir 2 pasos, mira el resto de Ge n-2 ¿cuántos tipos de programas necesitan.
Aquí tengo la intención por este problema, sino también ser analizada desde la simple a examinar a fondo DP (programación dinámica) algoritmo de programación dinámica se
.
Echar un vistazo a la etapa i de la caminata y que estén directamente relacionados.
Sólo el paso i-ésimo i-1 y el primer orden, está directamente relacionada con el número de i-2 orden.
dp |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
|
0 |
1 |
2 |
3 |
5 |
8 |
13 |
dp [i] = dp [i-2] + dp [i-1];
código de lenguaje C es completa
#include <stdio.h>
#include <stdlib.h>
int climbStairs(int n)
{
if(n<0) return 0;
if(n<=2) return n;
int dp[n+1]; //
dp[0]=0;
dp[1]=1;
dp[2]=2;
int i=3;
for(i=3; i<=n; i++)
{
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
int main()
{
int n;
scanf("%d",&n);
int result=climbStairs(n);
printf("%d\n",result);
return 0;
}