![](https://img-blog.csdnimg.cn/28a00d771e454c5c8812373cf379bee8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Zub57u0c3Vu,size_20,color_FFFFFF,t_70,g_se,x_16)
思路:
杨辉三角的特点是每个数是它左上方和右上方的数的和,我们在模拟的过程中,从左往右放元素,它的特点就为每个数是它左上方和上方的数的和,每一行的第一个和最后一个元素为1(除了第一行只有一个元素),即每行第二个元素(i,j)开始,等于前面一行(i-1,j-1)+(i-1,j)的和
代码
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>>res;
for(int i=0;i<numRows;i++){
vector<int>vec;
vec.push_back(1);//每一行的第一个元素都是1
for(int j=1;j<i;j++){//每行第二个元素(i,j)开始,等于前面一行(i-1,j-1)+(i-1,j)的和
vec.push_back(res[i-1][j-1]+res[i-1][j]);
}
if(i!=0)vec.push_back(1);//每一行的最后一个元素都是1,第一行只有一个元素,所以不要再加1
res.push_back(vec);//往res中添加当前行
}
return res;
}
};
代码优化:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>>res(numRows);
for(int i=0;i<numRows;i++){
res[i].resize(i+1);//i的长度为i+1
res[i][0]=res[i][i]=1;//每行的第一个和最后一个元素为1
for(int j=1;j<i;j++){//每行第二个元素(i,j)开始,等于前面一行(i-1,j-1)+(i-1,j)的和
res[i][j]=res[i-1][j-1]+res[i-1][j];
}
}
return res;
}
};