题目如下:
点此读题
这题没有别的要求,输入一个数后将其按杨辉三角的形式打出。既然题目已经提到了杨辉三角的形成过程,那我也不客气,直接照着用就是
当numRows==0,1,2时是特殊情况,先列举出来:
if(numRows == 0) return yanghui;
//num == 1
vector<int> v;
v.push_back(1);
yanghui.push_back(v);
if(numRows == 1) return yanghui;
//num == 2
vector<int> v2;
v2.push_back(1);
v2.push_back(1);
yanghui.push_back(v2);
if(numRows == 2) return yanghui;
底子打好之后就可以往上建塔,逻辑也不是很复杂,就利用杨辉三角的原理,每一个数组第一个和最后一个元素都是1,其余的分别对应上一个数组元素两两之和:
//num > 2
for(int i = 2; i < numRows; i++){
vector<int> vn;
vn.push_back(1);
for(int j = 1; j <= i - 1; j++)
vn.push_back(yanghui[i - 1][j - 1] + yanghui[i - 1][j]);
vn.push_back(1);
yanghui.push_back(vn);
}
return yanghui;
总体代码:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> yanghui;
if(numRows == 0) return yanghui;
//num == 1
vector<int> v;
v.push_back(1);
yanghui.push_back(v);
if(numRows == 1) return yanghui;
//num == 2
vector<int> v2;
v2.push_back(1);
v2.push_back(1);
yanghui.push_back(v2);
if(numRows == 2) return yanghui;
//num > 2
for(int i = 2; i < numRows; i++){
vector<int> vn;
vn.push_back(1);
for(int j = 1; j <= i - 1; j++)
vn.push_back(yanghui[i - 1][j - 1] + yanghui[i - 1][j]);
vn.push_back(1);
yanghui.push_back(vn);
}
return yanghui;
}
};