题目
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?
解析
题目的难点在于只给O(k)的空间,基本一个需要返回的vector就没了
所以关键是如何使用这个vector,我的办法是比如k=4,可以将vector初始化为(1,0,0,0),后面的时候,将除了第一个数字以外的数字都与前面一个数字累加
即
(1,0,0,0) ->(1,1,0,0)->(1,2,1,0)-<(1,3,3,1)
需要注意的是,我们在累加时使用的是上一层的值,计算第j+1个元素的时候需要用到第j个元素,如果顺序循环,第j个元素的值已经改变了,所以解决方法是逆序循环。
代码如下
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> ret(rowIndex+1);
ret[0] = 1;
for (int i = 1;i<=rowIndex;i++)
{
for (int j=i;j>0;j--)
{
ret[j] = ret[j]+ret[j-1];
}
}
return ret;
}
};
跟大神代码差不多,甚至比他的还简洁一点点。懒得贴出来了。