Algorithme leetcode | 70. Monter les escaliers (la rouille frappe fort)



70. Monter les escaliers :

Supposons que vous montez des escaliers. Il faut ndes marches pour arriver au sommet du bâtiment.

Vous pouvez monter 1ou 2marches à la fois. Combien de façons différentes pouvez-vous accéder au sommet du bâtiment ?

Exemple 1:

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

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

Exemple 2 :

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

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

indice:

  • 1 <= n <= 45

analyser:

  • Face à ce problème d'algorithme, le second leader replongea dans une profonde réflexion.
  • Vous pouvez gravir une ou deux marches, c'est-à-dire qu'en plus de la position initiale et de la première marche, nle chemin pour atteindre les autres marches ne peut se faire qu'à partir n - 1de la première marche ou n - 2de la troisième marche.
  • Il s'agit d'une programmation dynamique typique. Il n'y a qu'une seule façon d'atteindre la position initiale et la première étape, puis le nombre total de méthodes pour atteindre chaque étape peut être calculé dynamiquement, c'est-à-dire f(x) = f(x − 1 ) + f(x − 2) .
  • Je pense que la méthode de programmation dynamique est très bonne, mais parce qu'elle est régulière, il est plus rapide de la calculer mathématiquement. De plus, si vous listez les premiers éléments et les combinez avec la définition, vous constaterez que le nombre total de méthodes pour atteindre chaque étape est exactement C'est la suite de Fibonacci .
  • La programmation dynamique ne peut être calculée que dans l'ordre de à à. Quand 1est grand, l'efficacité est toujours insatisfaisante. L'exponentiation rapide de la matrice peut avoir la même efficacité qu'une recherche binaire. La connaissance des mathématiques est rendue à l'enseignant. Si vous êtes intéressé, vous pouvez l'étudier Après un certain temps, je peux le comprendre, mais je l'oublierai après un certain temps. C'est impuissant. La puissance rapide matricielle est une combinaison de multiplication matricielle et de puissance rapide . Vous pouvez le comprendre séparément, puis comprendre ensemble.nn
  • Par conséquent, il est recommandé de maîtriser d'abord la programmation dynamique, puis les exposants rapides. En ce qui concerne les formules générales et les méthodes mathématiques, il est difficile d'inférer d'autres cas à partir d'une instance. Il est nécessaire d'analyser en détail des problèmes spécifiques. Au final l'analyse, encore faut-il maîtriser le savoir mathématique lui-même.
  • Enfin, pour monter les escaliers, bien sûr, il faut être sur les 5ème et 5ème marches pour être autoritaire.

répondre:

rouiller:

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;
    }
}

aller:

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);
    }
};

python:

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);
    }
}

Merci beaucoup d'avoir lu cet article
. un peu tous les jours~ Cet article est rédigé par le chapeau blanc du second maître : https://le-yi.blog.csdn.net/Blog original~



Je suppose que tu aimes

Origine blog.csdn.net/leyi520/article/details/132272346
conseillé
Classement