Likou 119. Implémentation du langage Yanghui Triangle II-C

sujet

Étant donné un indice k non négatif, où k ≤ 33, renvoie la kème ligne du triangle de Yanghui.

Insérez la description de l'image ici

Dans le triangle Yanghui, chaque nombre est la somme des nombres en haut à gauche et en haut à droite.

Exemple:

Entrée: 3
Sortie: [1,3,3,1]

Source: LeetCode
Lien: https://leetcode-cn.com/problems/pascals-triangle-ii Le
droit d'auteur est la propriété de LeetCode . Pour les réimpressions commerciales, veuillez contacter l'autorisation officielle. Pour les réimpressions non commerciales, veuillez indiquer la source.

Résolution de problème

modèle:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* getRow(int rowIndex, int* returnSize){
    
    

}

Répondre:

La solution du triangle de Yanghui pour cette question peut être obtenue directement par l'élément. Par exemple, la question nécessite le k-ème triangle de Yanghui (au moins deux couches traitent des triangles, donc la deuxième couche est enregistrée comme 1). Par
exemple , pour trouver la quatrième couche, ce dont nous avons besoin est la troisième couche de nombres pour effectuer une opération d'addition, afin que nous puissions récursivement à la première couche pour cela, puis effectuer un algorithme violent, nous n'avons besoin que de deux éléments de la couche précédente pour trouver un élément., Mais c'est un processus de pousser constamment vers le niveau supérieur. La boucle est donc indispensable, on procède d'abord à une initialisation de base:
1: Tout d'abord, pour la conversion du nombre de couches, la première couche comporte en fait deux éléments. Le nombre d'éléments dans les niveaux suivants est-il un de plus que le nombre de couches, afin que nous puissions obtenir:

*returnSize=rowIndex+1;  //层级内的个数修正

Ce que nous devons renvoyer est le tableau de niveau k, nous devons donc initialiser ce tableau:

int *row=malloc(sizeof(int)*(*returnSize));		
//建立起指针(字节大小为于类型已指出)
memset(row,0,sizeof(int)*(*returnSize));		
//对于这个数组内填充满0
row[0]=1;
//第一个元素始终是1

Sur la base de notre analyse ci-dessus, il est évident que nous avons appris comment obtenir la kème couche, qui consiste à avancer vers le bas dans l'ordre et ensuite nous pouvons l'obtenir.
Établissez un cycle descendant en fonction du nombre de couches:

for(int i=1;i<=rowIndex;++i){
    
    
}

Satisfaire la logique interne de la progression ascendante:

        for (int j = i; j > 0; --j) {
    
    
           row[j] += row[j - 1];
       }

Enfin, entièrement disponible: ( Hyperlien vers la solution )

int* getRow(int rowIndex, int* returnSize) {
    
    
    *returnSize = rowIndex + 1;
    int* row = malloc(sizeof(int) * (*returnSize));
    memset(row, 0, sizeof(int) * (*returnSize));
    row[0] = 1;
    for (int i = 1; i <= rowIndex; ++i) {
    
    
        for (int j = i; j > 0; --j) {
    
    
            row[j] += row[j - 1];
        }
    }
    return row
}

Je suppose que tu aimes

Origine blog.csdn.net/qq_44922487/article/details/113793218
conseillé
Classement