题意:给定总行数numrows,输出所有行的 杨辉三角形
题解:
0:1
1:1 1
2:1 2 1
3:1 3 3 1
4:1 4 6 4 1
5:1 5 10 10 5 1
我们知道a[i][j]=a[i-1][j]+a[i-1][j-1],那么我们可以按照顺序设计一个vector<vector<int>> 相当于二维数组,依次将数据更新完。
代码:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> r(numRows);
if(numRows == 0) return r;
r[0].push_back(1);
for(int i = 1; i < numRows; i ++)
{
r[i].push_back(1);
for(int j = 1; j < i; j ++)
r[i].push_back(r[i-1].at(j-1) + r[i-1].at(j));
r[i].push_back(1);
}
return r;
}
};
也可以按照上一篇的思路:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<int> vec(numRows, 1);
vector<vector<int>> vvec(numRows);
int i = 0, j = 0;
for (i = 1; i <= numRows;i++){
vvec[i-1]=(vector<int>(i));
}
for (i = 0; i < numRows; i++){
vvec[i][0] = 1;
}
if(numRows==0||numRows==1){
return vvec;
}
vvec[1][1] = 1;
for (i = 2; i < numRows; i++){
for (j = i; j>0; j--){
if (i == j || j == 0){
vec[j] = 1;
}
else{
vec[j] = vec[j] + vec[j - 1];
}
vvec[i][j] = vec[j];
}
}
return vvec;
}
};