题目描述
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
题解代码
class Solution {
public:
vector<vector<int>> generate(int numRows) {
// 开辟杨辉三角的空间(只是开辟了纵向空间)
vector<vector<int>> data(numRows);
// 如果输入为0,则直接输出。
if (numRows == 0)
{
return data;
}
int i, j;
// 将杨辉三角的顶端赋值为1
data[0].push_back(1);
// 核心思想:找出杨辉三角的规律,发现每一行头尾都是1,中间第[j]个数等于上一行[j-1]+[j]
for (i = 1; i < numRows; i++)
{
//给行首填上1
data[i].push_back(1);
for (j = 1; j < i; j++)
{
data[i].push_back(data[i-1][j-1]+data[i-1][j]);
}
// 给末尾填上1
data[i].push_back(1);
}
return data;
}
};
class Solution {
public:
vector<vector<int>> generate(int numRows) {
// 开辟杨辉三角的空间
vector<vector<int>> data(numRows);
// 如果输入为0,则直接输出。
if (numRows == 0)
{
return data;
}
int i, j;
// 将杨辉三角的顶端赋值为1
data[0].push_back(1);
for (i = 1; i < numRows; i++)
{
// 继承上一行数据
data[i] = data[i - 1];
// 从后向前累加
for (j = i - 1; j > 0; j--)
{
data[i][j] += data[i][j - 1];
}
// 给末尾填上1
data[i].push_back(1);
}
return data;
}
};