118.杨辉三角
题目描述
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
解题方法
直接解,有点动态规划的意思
int** generate(int numRows, int* returnSize, int** returnColumnSizes)
{
int i, j; //行、列
int ** resArr = (int **) malloc (numRows * sizeof(int *));
*returnSize = numRows;
*returnColumnSizes = (int *) malloc (numRows * sizeof(int *));
for (i = 1; i <= numRows; i ++)
{
resArr[i-1] = (int *)malloc(sizeof(int) * i);
(*returnColumnSizes)[i-1] = i; // 每列大小
for (j = 0; j < i; j ++)
{
if (j == 0 || j == (i-1))
{
resArr[i-1][j] = 1;
}
else if (i >= 2 && j >= 1)
{
resArr[i-1][j] = resArr[i-2][j-1] + resArr[i-2][j];
}
}
}
return resArr;
}
119.杨辉三角II
题目描述
示例:
输入: 3
输出: [1,3,3,1]
解题思路
把118改改就行了
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* getRow(int rowIndex, int* returnSize)
{
int i, j; //行、列
int ** resArr = (int **) malloc ((rowIndex+1) * sizeof(int *));
*returnSize = rowIndex+1;
for (i = 1; i <= rowIndex+1; i ++)
{
resArr[i-1] = (int *)malloc(sizeof(int) * i);
for (j = 0; j < i; j ++)
{
if (j == 0 || j == (i-1))
{
resArr[i-1][j] = 1;
}
else if (i >= 2 && j >= 1)
{
resArr[i-1][j] = resArr[i-2][j-1] + resArr[i-2][j];
}
}
}
return resArr[rowIndex];
}