118. 杨辉三角(帕斯卡三角形)
描述
- 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
- 在杨辉三角中,每个数是它左上方和右上方的数的和。
示例
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
思路
- 直接根据杨辉三角的定义来实现,A[row][i] = A[row - 1][i - 1] + A[row - 1][i]
- 上述思路每次需要清空临时的Vector, LeetCode上看到的一个更好的解法,每次都往vec中加一个1,然后把中间的元素按照要求替换,这样两头就一直是1了,也不用清空。效率更好。
class Solution_118_01 {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> pascalTri;
vector<int> vec;
for (int row = 0; row < numRows; ++row) {
vec.clear();
vec.push_back(1);
for (int i = 1; i < row; ++i) {
vec.push_back(pascalTri[row - 1][i - 1] + pascalTri[row - 1][i]);
}
if (row != 0) vec.push_back(1);
pascalTri.push_back(vec);
}
return pascalTri;
}
};
class Solution_118_02 {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> pascalTri;
vector<int> vec;
for (int row = 0; row < numRows; ++row) {
vec.push_back(1);
if (row != 0) {
for (int k = 1; k < vec.size() - 1; ++k) {
vec[k] = pascalTri[row - 1][k - 1] + pascalTri[row- 1][k];
}
}
pascalTri.push_back(vec);
}
return pascalTri;
}
};