Monter les escaliers (Java/C/C++)

Supposons que vous montiez des escaliers. Il vous faut n marches pour atteindre le sommet du bâtiment.

Vous pouvez monter 1 ou 2 marches à la fois. De combien de manières différentes peut-on grimper au sommet d’un immeuble ?

Remarque : Étant donné que n est un entier positif.
Exemple 1:

Entrée : 2 Sortie : 2 Explication : Il existe deux façons de grimper au sommet du bâtiment.

  1. 1er niveau + 1er niveau
  2. Niveau 2

Exemple 2 :

Entrée : 3 Sortie : 3 Explication : Il existe trois façons de grimper au sommet du bâtiment.

  1. 1er niveau + 1er niveau + 1er niveau
  2. Niveau 1 + Niveau 2
  3. Niveau 2 + Niveau 1

Ce problème est un problème typique de programmation dynamique. La nième marche ne peut remonter qu'à partir de la n-1 ou de la n-2ème marche. Le chemin pour aller à la n-1ème étape + le chemin pour aller à la n-2ème étape = le chemin pour aller à la n-ième étape. Vous connaissez déjà le chemin pour aller à la 1ère et à la 2ème étape, et vous pouvez les ajouter le long du chemin.

f(x)=f(x−1)+f(x−2)

c++

class Solution {
    
    
public:
    int climbStairs(int n) {
    
    
        if(n == 1){
    
    return 1;}
        if(n == 2){
    
    return 2;}
        int a = 1, b = 2, temp;
        for(int i =3; i <= n; i++){
    
    
            temp = a;
            a = b;
            b = temp + b;
        }
        return b;
    }
};

Java

Ce programme a la même idée générale que le programme C++ ci-dessus, sauf que sa boucle démarre dès la première étape.

class Solution {
    
    
    public int climbStairs(int n) {
    
    
        if(n < 3){
    
    
            return n;
        }
        int p = 0, q = 0 , r = 1;
        for(int i = 1; i <= n; i++){
    
    
            p = q;
            q = r;
            r = p + q;
        }
        return r;
    }
}

langage C

Dans la méthode précédente, nous avons discuté du fait que f(n)f(n) est une récurrence linéaire homogène. Selon l'équation de récurrence f(n) = f(n - 1) + f(n - 2)f(n) =f (n−1)+f(n−2), on peut écrire l'équation caractéristique comme ceci :
Insérer la description de l'image iciInsérer la description de l'image ici
Insérer la description de l'image ici

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

Je suppose que tu aimes

Origine blog.csdn.net/smile66688/article/details/120354501
conseillé
Classement