GivennumRows, generate the firstnumRowsof Pascal's triangle.
For example, givennumRows= 5,
Return
[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
这是属于基础题目了,记得好像很多基础编程书上都有。
没记错的话,中文名字应该是“杨辉三角”。因为中国人记录这个要早。
本算法用vector保存数据,只保存了有数据的元素,没有保存多余的0.稍微节省点空间吧。
class Solution {
public:
vector<vector<int> > generate(int numRows) {
if(numRows == 0) return vector<vector<int> >(0);
vector<vector<int> > pasVec;
vector<int> preRow, curRow;
int row = 1, col =0;
preRow.push_back(1);
pasVec.push_back(preRow);
for(; row<numRows; row++)
{
curRow.resize(row+1);
for(col = 0; col<=row; col++)
{
passNext(curRow, preRow, row, col);
}
preRow = curRow;
pasVec.push_back(curRow);
}
return pasVec;
}
void passNext(vector<int>& curRow, vector<int>& preRow, int row, int col)
{
if (col==0)
{
curRow[0] = 1;
}
else if (row==col)
{
curRow[col] = 1;
}
else
{
curRow[col] = preRow[col]+preRow[col-1];
}
}
};
//2014-2-17 update
vector<vector<int> > generate(int numRows)
{
if (numRows < 1) return vector<vector<int> >();
vector<vector<int> > rs(1, vector<int>(1,1));
for (int i = 1; i < numRows; i++)
{
rs.push_back(vector<int>(1,1));
for (int j = 1; j < i; j++)
{
rs.back().push_back(rs[i-1][j-1] + rs[i-1][j]);
}
rs.back().push_back(1);
}
return rs;
}