✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Koodausharjoitus – Portaiden kiipeäminen – Fibonacci-numerot – C++ – Online Judge

13

Kysymys: Kiipeät portaita. Huipulle pääseminen kestää n askelta. Joka kerta voit ottaa 1 tai 2 askelta. Kuinka monta erilaista tapaa päästä huipulle?

Ongelman kuvaus: http://oj.leetcode.com/problems/climbing-stairs/

Tämä ongelma saattaa aluksi näyttää vaikealta, mutta kun ajattelet hetken, saatat löytää sen niin helpoksi. Vastaus on Fibonacci-luvut (katso tästä, täältä )

No, alkuperäiset Fibonacci-luvut määritellään sarjoiksi:

Koodausharjoitus - Portaiden kiipeäminen - Fibonacci-numerot - C++ - Online Judge

Tätä ongelmaa varten meidän on vain muutettava hieman:

Koodausharjoitus - Portaiden kiipeäminen - Fibonacci-numerot - C++ - Online Judgeja Koodausharjoitus - Portaiden kiipeäminen - Fibonacci-numerot - C++ - Online Judgekoska vain yhdelle vaiheelle on vain yksi erillinen tapa ja kahdelle vaiheelle, meillä on kaksi ratkaisua: 1 + 1 tai 2.

Loput ovat kuin Fibonacci-sarja. Koska Koodausharjoitus - Portaiden kiipeäminen - Fibonacci-numerot - C++ - Online Judgenykyisestä sijainnista, olemme mahdollisesti kahdesta edellisestä paikasta, F(n-1) ja F(n-2).

Voit käyttää rekursiota, mutta tämä voidaan ratkaista tehokkaammalla iteratiivisella ratkaisulla.

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

Tai pidät yksinkertaisemmasta rekursiivisesta funktiosta:

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

Huomautus: Rekursiivinen antaa  testissä 44 AIKARAJA YLITTYY. Tämä johtuu siitä, että rekursiivinen funktio yleensä laskee väliarvot monta kertaa. Esimerkiksi Koodausharjoitus - Portaiden kiipeäminen - Fibonacci-numerot - C++ - Online Judge, Koodausharjoitus - Portaiden kiipeäminen - Fibonacci-numerot - C++ - Online Judge. Koodausharjoitus - Portaiden kiipeäminen - Fibonacci-numerot - C++ - Online Judge lasketaan kahdesti.

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja