一、题目
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
二、题解思路
- 题解思路:先定义二维数组,但是数组每行的元素个数和是行号的数字大小;遍历二维数组,每行边缘位置赋值为1,其余位置的值是其上一行左上和右上的数之和。
三、代码实现
- C++代码实现
class Solution {
public:
vector<vector<int>> generate(int numRows)
{
vector<vector<int>> nums1;
for(int i=1;i<=numRows;i++) //对于第i行,存i个元素,先赋值为0,后期存入其他值覆盖
nums1.push_back(vector<int>(i,0));
for(int i=0;i<numRows;i++) //遍历每个位置存值
{
for(int j=0;j<=i;j++)
{
if(j==0 || j==i)
{
nums1[i][j]=1; //边界赋值为1
}
else
{
nums1[i][j]=nums1[i-1][j-1]+nums1[i-1][j];
}
}
}
return nums1;
}
};
四、知识点学习
- 如何定义一个第 i 行存 i 个元素的二维vector向量
vector<vector<int>> nums1;
for(int i=1;i<=numRows;i++) //对于第i行,存i个元素,先赋值为0,后期存入其他值覆盖
nums1.push_back(vector<int>(i,0));
即第一行存一个元素、第二行存两个元素、第三行存三个元素...............