Given numRows, generate the first numRows of Pascal's triangle.
For example, given numRows = 5,
Return
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
Subscribe to see which companies asked this question
解题思路:每一层的第i个位置,等于上一层第i-1与第i个位置之和。
int** generate(int numRows, int** columnSizes, int* returnSize)
{
if(numRows<0 ||!columnSizes
||!(*columnSizes) ||!returnSize)
return NULL;
int i,j = 0;
int **columnArray = (int **)malloc(sizeof(int)*numRows);
if(1==numRows) {
columnArray[0] = (int *)malloc(sizeof(int));
columnArray[0][0] = 1;
return columnArray;
}
for(i=0;i<numRows;i++) { /*i:当前行*/
columnArray[i] = (int *)malloc(sizeof(int)*(i+1));
columnArray[i][0] = 1; /*第一个数为1*/
for(j=1;j<i;j++) { /*j:当前的列数*/
columnArray[i][j] = columnArray[i-1][j-1]+columnArray[i-1][j];
}
if(i>=1) {
AllColumnArray[i][j] = 1;/*当前最后一个数也为1*/
}
}
return columnArray;
}
C++ 的入参就很清楚了
class Solution {
public:
vector<vector<int> > generate(int numRows) {
vector<vector<int> > ret;
if(numRows == 0)
return ret;
vector<int> last(1,1);
ret.push_back(last);
for(int i = 2; i <= numRows; i ++)
{// i_th level
last.push_back(0);
vector<int> cur = last;
for(int j = 1; j < i; j ++)
{
cur[j] = last[j] + last[j-1];
}
ret.push_back(cur);
last = cur;
}
return ret;
}
};