Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Exercice de codage – Monter des escaliers – Nombres de Fibonacci – C++ – Juge en ligne

51

Question : Vous montez des escaliers. Il faut n étapes pour arriver au sommet. A chaque fois, vous pouvez faire 1 pas ou 2 pas. Combien de façons distinctes d’arriver au sommet ?

Description du problème: http://oj.leetcode.com/problems/climbing-stairs/

Ce problème peut sembler difficile au premier abord, mais quand vous y réfléchissez une seconde, vous pourriez le trouver si facile. La réponse est les nombres de Fibonacci (voir ici, ici )

Eh bien, les nombres de Fibonacci originaux sont définis comme des séquences :

Exercice de codage - Monter des escaliers - Nombres de Fibonacci - C++ - Juge en ligne

Pour ce problème, il suffit de modifier un peu :

Exercice de codage - Monter des escaliers - Nombres de Fibonacci - C++ - Juge en ligneet Exercice de codage - Monter des escaliers - Nombres de Fibonacci - C++ - Juge en ligneparce que pour 1 seule étape, il n’y a qu’1 chemin distinct et pour 2 étapes, on a deux solutions: 1 + 1 ou 2.

Le reste est en série de Fibonacci. Le Exercice de codage - Monter des escaliers - Nombres de Fibonacci - C++ - Juge en ligneparce qu’à partir de la position actuelle, nous sommes peut-être des deux positions précédentes, F(n-1) et F(n-2).

Vous pouvez utiliser la récursivité, mais cela peut être résolu par une solution itérative plus efficace.

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

Ou vous préférez une fonction récursive plus simple :

class Solution {
public:
    int climbStairs(int n) {
        if (n == 1) return 1;
        if (n == 2) return 2;
        return climbStairs(n - 1) + climbStairs(n - 2);
    }
};

Remarque: La fonction récursive donnera TIME LIMIT EXCEEDED sur le test 44. En effet, la fonction récursive calcule généralement des valeurs intermédiaires plusieurs fois. Par exemple, Exercice de codage - Monter des escaliers - Nombres de Fibonacci - C++ - Juge en ligne, Exercice de codage - Monter des escaliers - Nombres de Fibonacci - C++ - Juge en ligne. Exercice de codage - Monter des escaliers - Nombres de Fibonacci - C++ - Juge en ligne est calculé deux fois.

Source d’enregistrement: helloacm.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More