这道题要求输出杨辉三角的第k行,初始行为0。并且要求空间复杂度为O(k)
输出杨辉三角的第k行很简单,但是要求空间复杂度为k就需要好好的考虑一下了。
思路:使用两个临时变量left和right来辅助运算。初始时将left=v[0],从第j(j>0)个数开始,每个数进行加right,加之前right=left,加完后left=right。直到最后一个元素,将1push到最后就完成了。
代码:
vector<int> getRow(int rowIndex)
{
vector<int> v;
if (rowIndex < 0) return v;
int left = 0, right = 0;
v.push_back(1);
for (int i = 1; i <= rowIndex; ++i)
{
int size = v.size();
for (int j = 0; j <= size; ++j)
{
if (j == 0)
{
left = v[j];
continue;
}
if (j == size)
{
v.push_back(1);
break;
}
right = left;
left = v[j];
v[j] = right + v[j];
}
}
return v;
}