该题与之前所做的杨辉三角几乎没有区别,只是该题返回的只是杨辉三角的一行而已(注意这里的第一行代表0)
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<vector<int> >num(rowIndex+1);//开rowIndex+1行数组
for(int i=0;i<rowIndex+1;i++)
{
num[i].resize(i+1);//每一行开i+1列
num[i][0]=1;//初始化
num[i][i]=1;
for(int j=1;j<i;j++)//从第三行开始
{
num[i][j]=num[i-1][j-1]+num[i-1][j];//递推公式
}
}
return num[rowIndex];返回特定行
}
};
做到这里我们就结束了吗,不,该题还可以优化,该题由于只需返回杨辉三角的某一行,且每一行只与上一行有关,那么我们就可以借助滚动数组的思想,使用两个数组来配合滚动
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> slow,fast;
for(int i=0;i<rowIndex+1;i++)
{
fast.resize(i+1);//开i+1为长度的数组
fast[0]=1;//初始化
fast[i]=1;
for(int j=1;j<i;j++)//从第三行开始
{
fast[j]=slow[j]+slow[j-1];//递推公式
}
slow=fast;//将fast记录成为过去,fast继续计算下一行
}
return slow;//注意返回的是slow
}
};