问题描述:
Given an index k, return the kth row of the Pascal's triangle.
For example, given k = 3,
Return [1,3,3,1]
.
Note:
Could you optimize your algorithm to use only O(k) extra space?
其实可以用Pascal's Triangle的代码,代码见 LeetCode 118. Pascal's Triangle
返回res[k]即可。但空间复杂度超了。
因此,我在解决此题的时候,用的一个一维数组,用以保存前一行的数据,当求当前行的时候,还是用之前的递推式即可。
AC代码如下:
vector<int> getRow(int rowIndex)
{
vector<int> pre;
for(int i = 0;i<=rowIndex;i++)
{
vector<int>row;
if(i == 0)//第一行只有一个1的情况
{
row.push_back(1);
}
else if(i == 1)//第二行两个1 的情况
{
row.push_back(1);
row.push_back(1);
}
else//大于2行的情况
{
row.push_back(1);//第一个1
for(int j = 1;j < i;j++)//中间的数用递推式求出
{
int temp= pre[j]+pre[j-1];//递推式
row.push_back(temp);
}
row.push_back(1);//最后一个1
}
pre.clear();//每次到这里要清空数组pre在给他赋值
for(int i = 0;i<row.size();i++)//赋值过程
pre.push_back(row[i]);
}
return pre;
}