1. 程式人生 > 其它 >力扣119.楊輝三角II-C語言實現

力扣119.楊輝三角II-C語言實現

技術標籤:力扣刷題c語言演算法資料結構

題目

給定一個非負索引 k,其中 k ≤ 33,返回楊輝三角的第 k 行。

在這裡插入圖片描述

在楊輝三角中,每個數是它左上方和右上方的數的和。

示例:

輸入: 3
輸出: [1,3,3,1]

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/pascals-triangle-ii
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解題

模板:

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

答題:

對於本題楊輝三角的解決辦法,可以通過對於元素的直接求出,比如題目要求的是第k層楊輝三角(至少兩層處理三角,所以第二層又記為1).
比如求取第4層,我們需要的是第三層的數字進行一個加法運算得到,所以我們對於這個就可以遞推到第一層,然後進行一個暴力的演算法,我們求一個元素只需上一層的兩個元素,,但是是一個不斷推到上層的過程。所以迴圈必不可少,我們先進行一個基礎的初始化:
1:首先對於層數的轉換,第一層其實就是有兩個元素了,後面都是層級的元素個數比層數多一個嗎,所以我們可以得到:

*returnSize=
rowIndex+1; //層級內的個數修正

我們需要返回的是第k層的陣列,所以需要對這陣列進行一個初始化:

int *row=malloc(sizeof(int)*(*returnSize));		
//建立起指標(位元組大小為於型別已指出)
memset(row,0,sizeof(int)*(*returnSize));		
//對於這個陣列內填充滿0
row[0]=1;
//第一個元素始終是1

依據我們上面的分析很明顯已經得知了怎樣才能得到第k層,就是依次向下推進然後就可以得到。
建立按層數向下的迴圈:

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

滿足內部一個向上推進的邏輯:

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

最後綜合可得:(題解超連結

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
}