原题目:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
思路1:首先生成每一个行中列数量都不同的vecotr数组并且将它们赋值为0,然后用一个二维数组按照规律进行赋值即可。
代码1;
class Solution {
public:
vector<vector<int>> generate(int numRows) {
int zone=1;
vector<vector<int>> v(numRows, vector<int>());//初始层数,赋值
for (int i = 0; i < numRows; i++) {
v[i].resize(zone++);//设置每一层的个数并且赋值为0;
}
for (int i = 0; i < numRows; i++) {
for(int j=0;j<=i;j++)
{
if((i<2)||(j==0)||(j==i))
v[i][j]=1;
if(i>=2&&j>0&&j<i)
{
v[i][j]=v[i-1][j]+v[i-1][j-1];
}
}
}
return v;
}
};
思路2:
设置一个vec数组来存放每一层的元素,然后用while循环来决定这个二维数组有多少层,用push_back函数将vec数组放入每一层之中,如果每一层的元素超过了2个元素,就用?运算符来判断哪个元素位置是否超过1,如果超过1,就将这个元素的值变为这个元素位置当前的值+前一层元素当前位置的值即可。当元素位置等于vec数组最后一个元素位置时,跳到下一层进行赋值。
代码2:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<int> vec = {1};
vector<vector<int>> res;
while (numRows-- > 0)
{
res.push_back(vec);
for (int i = vec.size() - 1; i >= 1; i--)
vec[i] += (i - 1 >= 0 ? vec[i - 1] : 0);
vec.push_back(1);
}
return res;
}
};