题目:
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 3 输出: [1,3,3,1]
进阶:
你可以优化你的算法到 O(k) 空间复杂度吗?
结果:
解题思路:
因为递归会有很多多余的计算,因此直接把34个数组全部算出,输出需要的那一行数据即可。
代码:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* getRow(int rowIndex, int* returnSize){
int temp[34][34] = {};
temp[0][0] = 1;
for(int i = 1; i <34; i++) {
temp[i][0] = 1;
for(int j = 1; j <= i; j++) {
temp[i][j] = temp[i-1][j-1] + temp[i-1][j];
}
}
int *retArr = (int *)malloc(sizeof(int) * (rowIndex + 1));
*returnSize = rowIndex + 1;
for(int i = 0; i <= rowIndex; i++) {
retArr[i] = temp[rowIndex][i];
}
return retArr;
}