题目I: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] ]算法很简单,除了首尾的1,其他的元素都由上一行两个元素相加得到
vector<vector<int> > generate(int numRows)
{
vector<vector<int> > res;
vector<int> tmp;
if(numRows<1) return res;
tmp.push_back (1);
res.push_back (tmp);
for(int i=1; i<numRows; i++)
{
tmp.clear ();
tmp.push_back (1);
for(int j=1; j<i; j++)
{
tmp.push_back(res.back ()[j-1]+res.back ()[j]); //用上一行的两个数相加
}
tmp.push_back(1);
res.push_back (tmp);
}
return res;
}
题目II:Given an index k, return the kth row of the Pascal's triangle.
For example, given k = 3,
Return [1,3,3,1]
.
同时要求O(k)空间复杂度
vector<int> getRow(int rowIndex)
{
vector<int> a(rowIndex + 1);
a[0] = 1;
for(int i = 1; i <= rowIndex; i++)
for(int j = i; j >= 0; j--)
if (j == i)
a[j] = a[j-1];
else if (j == 0)
a[j] = a[j];
else
a[j] = a[j-1] + a[j]; //直接在前一行的基础上扩展
return a;
}