LeetCode 118. Yang Hui Dreieck (C ++)


Problem : Bei einer nicht negativen Ganzzahl numRows die erste numRows-Zeile des Yang Hui-Dreiecks generieren.
Fügen Sie hier eine Bildbeschreibung ein
Im Yang Hui-Dreieck ist jede Zahl die Summe ihrer oberen linken und oberen rechten Zahlen.

Ideen zur Problemlösung:
Wie aus der im Titel angegebenen Animation hervorgeht, sind die erste und die letzte Zeile jeder Zeile 1, und nur die mittlere Zahl wird aus der vorherigen Zeile abgeleitet. Sie können also zuerst feststellen, ob die Anzahl der angegebenen Daten numRows kleiner als 3 ist, wenn dies der Fall ist, dann den Wert direkt zuweisen und die Antwort zurückgeben. Wenn es größer oder gleich 3 ist, können Sie ab der dritten Zeile die zyklische Rekursion verwenden, um die folgende Zeile aus der vorherigen Zeile herauszuschieben.
Zusammenfassung der Erfahrungen: Nachdem
ich das Problem gelöst hatte, habe ich mir die Lösungen anderer angesehen, viele hervorragende Lösungen gefunden und Kenntnisse gewonnen. Tatsächlich können Sie eine Schleife direkt verschachteln, ohne die Anzahl der in der Frage angegebenen Zeilen zu beurteilen, z. B. das Beispiel von 0 ms.

In vector:
Reserve ist der vom Container reservierte Speicherplatz, der das Elementobjekt jedoch nicht wirklich erstellt. Vor dem Erstellen des Objekts können Sie nicht auf die Elemente im Container verweisen. Wenn Sie also neue Elemente hinzufügen, müssen Sie die Funktion push_back () / insert () verwenden.
Beim Ändern der Größe wird die Größe des Containers geändert und ein Objekt erstellt. Nach dem Aufrufen dieser Funktion können Sie daher auf das Objekt im Container verweisen. Verwenden Sie daher beim Hinzufügen eines neuen Elements den Operator operator [] oder den Iterator, um auf das Elementobjekt zu verweisen .

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int> > ans(numRows,vector<int>(0));
        if(1 == numRows){
            ans[0].push_back(1);
        }else if(2 == numRows){
            ans[0].push_back(1);
            ans[1].push_back(1);
            ans[1].push_back(1);
        }else if(numRows>2){
            ans[0].push_back(1);
            ans[1].push_back(1);
            ans[1].push_back(1);
            for(int i=2;i<numRows;i++){
                ans[i].push_back(1);
                for(int j=0;j<ans[i-1].size()-1;j++)
                    ans[i].push_back(ans[i-1][j]+ans[i-1][j+1]);
                ans[i].push_back(1);
            }
        }
        return ans;
    }
};

Beispiel mit einer Ausführungszeit von 0 ms:

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> res(numRows, vector<int>(0));
        for (int i=0; i<numRows; i++) {
            res[i].resize(i+1);
            res[i][0] = 1;
            res[i][i] = 1;
            for(int j=1; j<i; j++){
                res[i][j] = res[i-1][j-1] + res[i-1][j];
            }
        }
        return res;
    }
};
Veröffentlicht 111 Originalarbeiten · erntete Lob 2 · Aufrufe 3533

Ich denke du magst

Origin blog.csdn.net/m0_38088647/article/details/101987243
Empfohlen
Rangfolge