力扣119.楊輝三角II-C語言實現
阿新 • • 發佈:2021-02-13
題目
給定一個非負索引 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
}