题目描述
Given a non-negative integer numRows, generate the first numRows of Pascal’s triangle.
In Pascal’s triangle, each number is the sum of the two numbers directly above it.
题目大意:构造一个如图所示三角形
样例
Example:
Input: 5
Output:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
不是返回和样例中一模一样的形式,而是一个二维数组就行。
python解法
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
list1 = [[1],[1,1]]
if numRows == 0:
return []
elif numRows == 1:
return [[1]]
elif numRows == 2:
return list1
else:
for index in range(numRows-2):
a = []
for i in range(len(list1[-1])-1):
a.append(list1[-1][i]+list1[-1][i+1])
a.insert(0,1)
a.append(1)
list1.append(a)
return list1
Runtime: 36 ms, faster than 76.13% of Python3 online submissions for Pascal’s Triangle.
Memory Usage: 13.9 MB, less than 7.14% of Python3 online submissions for Pascal’s Triangle.
题后反思:
C语言解法
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int** generate(int numRows, int* returnSize, int** returnColumnSizes){
if (!numRows)
{
*returnSize = 0;
*returnColumnSizes = (int*)malloc(sizeof(int));
returnColumnSizes[0][0] = 0;
return NULL;
}
else if (numRows == 1)
{
*returnSize = 1;
*returnColumnSizes = (int*)malloc(sizeof(int));
returnColumnSizes[0][0] = 1;
int **returnArray = (int**)malloc(sizeof(int*));
*returnArray = (int*)malloc(sizeof(int));
returnArray[0][0] = 1;
return returnArray;
}
else if (numRows == 2)
{
*returnSize = 2;
*returnColumnSizes = (int*)malloc(sizeof(int)*2);
returnColumnSizes[0][0] = 1;
returnColumnSizes[0][1] = 2;
int **returnArray = (int**)malloc(sizeof(int*)*2);
returnArray[0] = (int*)malloc(sizeof(int));
returnArray[0][0] = 1;
returnArray[1] = (int*)malloc(sizeof(int)*2);
returnArray[1][0] = 1;
returnArray[1][1] = 1;
return returnArray;
}
else
{
*returnSize = numRows;
*returnColumnSizes = (int*)malloc(sizeof(int)*numRows);
for(int i=0;i<numRows;i++)
{
returnColumnSizes[0][i] = i+1;
}
int **returnArray = (int**)malloc(sizeof(int*)*numRows);
returnArray[0] = (int*)malloc(sizeof(int));
returnArray[0][0] = 1;
returnArray[1] = (int*)malloc(sizeof(int)*2);
returnArray[1][0] = 1;
returnArray[1][1] = 1;
for (int i=2;i<numRows;i++)
{
returnArray[i] = (int*)malloc(sizeof(int)*(i+1));
returnArray[i][0] = 1;
for (int j=1;j<i;j++)
{
returnArray[i][j] = returnArray[i-1][j-1] + returnArray[i-1][j];
}
returnArray[i][i] = 1;
}
return returnArray;
}
}
Runtime: 0 ms, faster than 100.00% of C online submissions for Pascal’s Triangle.
Memory Usage: 7.3 MB, less than 100.00% of C online submissions for Pascal’s Triangle.
题后反思:
- 代码量有点多,很多语句都是重复的,可以改进。
文中都是我个人的理解,如有错误的地方欢迎下方评论告诉我,我及时更正,大家共同进步