给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出:
[[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
解题思路:
这里解释一下vector<vector<int>>
先看一下vector<int>
vector<vector<int>>
大家可以对比理解一下 vector<int>和vector<vector<int>>
使用vector<vector<int>>, 申请一个二维数组的空间
理解了vector<vector<int>>之后,这题就非常简单
class Solution {
public:
vector<vector<int>> generate(int numRows)
{
//申请行的数量
vector<vector<int>> vv(numRows);
for(size_t i = 0; i < numRows; i++)
{
//给vector<int>,申请空间,可以理解为申请数组的列
vv[i].resize(i + 1, 0);
//给每列申请的空间赋值
vv[i][0] = vv[i][i] = 1;
}
for(size_t i = 2; i < numRows; i++)
{
for(size_t j = 1; j < i; j++)
{
//因为是杨辉三角,所以跳过第一,二行和第一列
vv[i][j] = vv[i - 1][j] + vv[i - 1][j - 1];
}
}
return vv;
}
};