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]
]
计算杨辉三角:每个数字等于上一行的左右两个数字之和,即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,根据该原理即可写出程序
关键点:当N为0时,应该返回一个空的vector[],而不是一个包含空vector的vector[[]];另外在计算每行的元素时,注意首尾元素的处理即可。总的来说比较容易实现。
vector<vector<int>> generate(int numRows)
{
//杨辉三角的性质:每个数字等于上一行的左右两个数字之和,即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和
vector<vector<int>>output;
vector<int> row_vec, lastRow_vec;
int i, j, n, temp_right, temp_left;
if (numRows>0)
{
row_vec.push_back(1);
output.push_back(row_vec);
}
if (numRows>1)
{
for (i = 1; i//生成每行的vector
{
lastRow_vec = row_vec;
row_vec.clear();
for (j = 0; j <= i; j++)//生成每行的元素
{
temp_left = (j - 1 >= 0) ? lastRow_vec[j - 1] : 0;
temp_right = (j <= i-1) ? lastRow_vec[j] : 0;
// temp=j>lastRow_vec[j]+lastRow_vec[j-1];
row_vec.push_back(temp_left + temp_right);
}
output.push_back(row_vec);
}
}
return output;
}