问题描述
我正在编写代码以打印帕斯卡三角形的第k行。最初取两个向量,然后选择计算p和q中的下一行。但是这段代码给人以溢出的印象,我不知道为什么。请帮忙!
vector<int> getRow(int k) {
vector<int> p,q;
p.push_back(1);
q.push_back(1);
q.push_back(1);
for(int i=2;i<=k;i++)
{
if(i%2)
{
p.clear();
p.push_back(1);
for(int j=1;j<i;j++)
p.push_back(q[j]+q[j-1]);
p.push_back(1);
}
else
{
q.clear();
q.push_back(1);
for(int j=1;j<i;j++)
q.push_back(p[j]+p[j-1]);
q.push_back(1);
}
}
if(k%2)
return p;
else
return q;
}
解决方法
在此行:q.push_back(p[j] + p[j - 1])
中,您要在没有该单元格时尝试访问j = 1
。因此,再添加一个p.push_back(1)
即可。
或者最好将循环前的push_back
更改为此:
for (int i = 0; i <= 1; i++) {
p.push_back(1);
q.push_back(1);
}