Algoritmo leetcode| 70. Subir escaleras (el óxido golpea fuerte)



70. Subir escaleras:

Supongamos que está subiendo escaleras. Necesitas nescalones para llegar a la parte superior del edificio.

Se puede subir 1o 2escalones a la vez. ¿De cuántas maneras diferentes puedes llegar a la parte superior del edificio?

Ejemplo 1:

输入:
	
	n = 2
	
输出:
	
	2
	
解释:

	有两种方法可以爬到楼顶。
	1. 1 阶 + 1 阶
	2. 2 阶

Ejemplo 2:

输入:
	
	n = 3
	
输出:
	
	3
	
解释:

	有三种方法可以爬到楼顶。
	1. 1 阶 + 1 阶 + 1 阶
	2. 1 阶 + 2 阶
	3. 2 阶 + 1 阶

pista:

  • 1 <= n <= 45

analizar:

  • Frente a este problema de algoritmo, el segundo líder volvió a pensar profundamente.
  • Puedes subir uno o dos escalones, es decir, además de la posición inicial y el primer escalón, nla forma de llegar a otros escalones solo puede ser desde n - 1el primer escalón o n - 2desde el tercer escalón.
  • Esta es una programación dinámica típica. Solo hay una forma de alcanzar la posición inicial y el primer paso, y luego se puede calcular dinámicamente el número total de métodos para alcanzar cada paso, es decir, f(x) = f(x − 1 ) + f(x - 2) .
  • Creo que el método de programación dinámica es muy bueno, pero debido a que es regular, es más rápido calcularlo matemáticamente. Además, si enumera los primeros elementos y los combina con la definición, encontrará que el número total de métodos llegar a cada paso es exactamente Es la secuencia de Fibonacci .
  • La programación dinámica solo se puede calcular en orden de a a. Cuando 1es grande, la eficiencia sigue siendo insatisfactoria. La exponenciación rápida de la matriz puede tener la misma eficiencia que la búsqueda binaria. El conocimiento de las matemáticas se devuelve al profesor. Si usted es interesado, puede estudiarlo Después de un tiempo, puedo entenderlo, pero lo olvidaré después de un tiempo. Es indefenso. El poder rápido de Matrix es una combinación de multiplicación de matrices y poder rápido . Puedes entenderlo por separado y luego entender juntos.nn
  • Por lo tanto, se recomienda dominar primero la programación dinámica, seguida de exponentes rápidos. En cuanto a fórmulas generales y métodos matemáticos, es difícil inferir otros casos a partir de una instancia. Es necesario analizar problemas específicos en detalle. En última instancia análisis, todavía es necesario dominar el conocimiento matemático en sí.
  • Finalmente, para subir las escaleras, por supuesto, debes estar en los escalones 5 y 5 para ser dominante.

respuesta:

óxido:

impl Solution {
    
    
    pub fn climb_stairs(n: i32) -> i32 {
    
    
        let sqrt5 = 5f64.sqrt();
        let fibn = ((1f64 + sqrt5) / 2f64).powi(n + 1) - ((1f64 - sqrt5) / 2f64).powi(n + 1);
        return (fibn / sqrt5).round() as i32;
    }
}

ir:

func climbStairs(n int) int {
    
    
    sqrt5 := math.Sqrt(5)
	pow1 := math.Pow((1+sqrt5)/2, float64(n+1))
	pow2 := math.Pow((1-sqrt5)/2, float64(n+1))
	return int(math.Round((pow1 - pow2) / sqrt5))
}

c++:

class Solution {
    
    
public:
    int climbStairs(int n) {
    
    
        const double sqrt5 = sqrt(5);
        const double fibn = pow((1 + sqrt5) / 2, n + 1) - pow((1 - sqrt5) / 2, n + 1);
        return (int) round(fibn / sqrt5);
    }
};

pitón:

class Solution:
    def climbStairs(self, n: int) -> int:
        sqrt5 = math.sqrt(5)
        fibn = pow((1 + sqrt5) / 2, n + 1) - pow((1 - sqrt5) / 2, n + 1)
        return round(fibn / sqrt5)


Java:

class Solution {
    
    
    public int climbStairs(int n) {
    
    
        final double sqrt5 = Math.sqrt(5);
        final double fibn = Math.pow((1 + sqrt5) / 2, n + 1) - Math.pow((1 - sqrt5) / 2, n + 1);
        return (int) Math.round(fibn / sqrt5);
    }
}

Muchas gracias por leer este artículo ~
Bienvenido a [Me gusta] [Favorito] [Comentario] Ir tres veces seguidas ~
No es difícil darse por vencido, pero debe ser genial ~
Espero que todos podamos mejorar un poco todos los días. ~
Este artículo está escrito por el sombrero blanco del segundo maestro: https://le-yi.blog.csdn.net/Blog original~


Supongo que te gusta

Origin blog.csdn.net/leyi520/article/details/132272346
Recomendado
Clasificación