题目链接
题目描述
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 3
输出: [1,3,3,1]
代码实现
杨辉三角问题通常的解决方法是二维数组,A[k][n] = A[k-1][n-1] + A[k-1][n];题目建议使用O(K)的空间,所以可以使用一维数组代替二维数组。
如果我们从后向前计算,a = {1,3,3,1},如果要计算下一行,1+3的结果将会存在a[0],覆盖第一个1,但是最终需要单独在第一个位置插入1,不方便,可以考虑从后向前覆盖,将3+1的结果存入a[3],覆盖最后一个1的位置,第一个1将不会被覆盖,我们需要在数组末尾加一个1就可以了。
题目的问题主要是巧妙的边界条件。
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> res;
for(int i = 0; i <= rowIndex; i++)
{
for(int j = i-1; j>0; j--)
{
res[j] = res[j-1] + res[j];
}
res.push_back(1);
}
return res;
}
};
之后会补充一下笨的二维数组的写法,主要是为了掌握边界条件。