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]对当前操作无影响。