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?
题意:
打印杨辉三角的第k行,要求空间复杂度为O(k)。
思路:
规定了空间复杂度,那么就不能求出每一行再来返回第k行了。只有观察规律,因为杨辉三角的第m行n列是C(m,n)。且关于中间位置对称,利用数学知识可以发现规律。
代码:
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int>r;
r.resize(rowIndex+1);
r[0]=r[rowIndex]=1;
for(int i=1;i<=(rowIndex+1)/2;i++)
{
r[i]=r[rowIndex-i]=(unsigned long)r[i-1]*(rowIndex-i+1)/i;
}
return r;
}
};