Pascal’s Triangle
杨辉三角,求出前n行的杨辉三角排列
杨辉三角的特点是triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j],越界的下标值为0
所以直接根据这个公式计算即可
代码如下
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> res(numRows);
if(numRows == 0) return res;
res[0] = {1};
for(int i = 1; i < numRows; ++i)
{
res[i].reserve(i + 1);
for(int j = 0; j < i + 1; ++j)
{
int n = 0;
/* 第一个j - 1会越界,直接设置为0 */
n += (j > 0) ? res[i - 1][j - 1] : 0;
/* 最后一个j会越界,直接设置为0 */
n += (j < i) ? res[i - 1][j] : 0;
res[i].push_back(n);
}
}
return res;
}
};
Pascal’s Triangle II
杨辉三角,找到第k行(从0开始),要求空间复杂度是O(k)
因为前k行每一行的元素个数都小于k+1,所以直接开辟k+1的数组空间,然后从第0行开始求,不断改变数组元素,最后求得第k行
又因为求新的一行时会用到上一行的对应列元素和前一列元素,所以不能从左向右而应该从又向左求
代码如下
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> res(rowIndex + 1);
res[0] = 1;
for(int i = 1; i <= rowIndex; ++i)
{
/* 从后往前求 */
for(int j = i; j >= 0; --j)
{
int n = 0;
n += (j > 0) ? res[j - 1] : 0;
n += (j < i) ? res[j] : 0;
res[j] = n;
}
}
return res;
}
};
两道题都是和杨慧三角有关,对着公式写代码就可以了