Given an index k, return the kth row of the Pascal's triangle.
For example, given k = 3,
Return [1,3,3,1].
Note:
Could you optimize your algorithm to use only O(k) extra space?
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* getRow(int rowIndex, int* returnSize)
{
int *array = malloc((rowIndex + 1) * sizeof(int));
/*内存初始化*/
memset(array,0x0,sizeof(int) * (rowIndex + 1));
array[0] = 1;
for (int i = 0; i <= rowIndex; ++i)
{
/*每次从后往前计算,最后一个元素需要计算*/
for (int j = i; j > 0; j--)
{
array[j] += array[j-1];
}
}
*returnSize = rowIndex + 1;
return array;
}
经验与教训
与LeetCode118不同的是此处不能使用二维数组,因此在计算每一行的元素时需要从后往前计算,否则前面的值会被覆盖进而影响计算结果。
比如我们在计算第5行时,array[0] = 1,array[1] = array[0] + array[1],在计算array[2]时需要用到array[1]+array[2],由于array[1]在前面的计算中值被修改了,所以要采用从后往前的方法进行计算。比如第5行,先计算array[4] = array[3]+array[4],然后再往前计算array[3]时上一步修改的array[4]对当前操作无影响。