Código Leet 118. Triángulo Yang Hui (C ++)


Problema : dado un número entero de filas no negativo, genera la primera fila numRows del triángulo Yang Hui.
Inserte la descripción de la imagen aquí
En el triángulo Yang Hui, cada número es la suma de sus números superiores izquierdo y superior derecho.

Ideas para resolver problemas:
como se puede ver en la animación que figura en el título, la primera y la última de cada línea son 1, y solo el número del medio se deriva de la línea anterior. Entonces, primero puede determinar si el número de datos numRows dados es menor que 3, si es así, luego asigne directamente el valor y devuelva la respuesta. Si es mayor o igual a 3, entonces desde la tercera línea, puede usar la recursión cíclica para expulsar la siguiente línea de la línea anterior.
Resumen de la experiencia: Después de
resolver el problema, miré las soluciones de otras personas y encontré muchas soluciones excelentes y obtuve conocimiento. De hecho, puede anidar directamente un bucle sin juzgar el número de líneas dadas en la pregunta, como el ejemplo de 0 ms.

En vector:
reserve es el espacio reservado por el contenedor, pero en realidad no crea el objeto elemento. Antes de crear el objeto, no puede hacer referencia al elemento en el contenedor, por lo que al agregar un nuevo elemento, debe usar la función push_back () / insert ().
Cambiar el tamaño es cambiar el tamaño del contenedor y crear un objeto. Por lo tanto, después de llamar a esta función, puede hacer referencia al objeto en el contenedor, por lo que al agregar un nuevo elemento, use el operador operator [] o use el iterador para referirse al objeto elemento .

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

Ejemplo con tiempo de ejecución de 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;
    }
};
Publicados 111 artículos originales · ganado elogios 2 · Vistas 3533

Supongo que te gusta

Origin blog.csdn.net/m0_38088647/article/details/101987243
Recomendado
Clasificación