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)。
这道题与Pascal’s Triangle很类似,只是本题只需要求出某一行的结果,而后者要求出所有行的结果,所以可以很自然的借用上一行的结果。
本题只能考虑只使用一行的空间来存储结果,同时存储上一行:循环利用当前的数组,用上一行相邻的两个数的和作为当前值,在遍历的过程中,需要用p保存当前值,因为下一次操作还要用到这个值。
附上k=4时的部分过程图示:
下面贴上代码:
class Solution {
public:
vector<int> getRow(int rowIndex){
vector<int> ans;
ans.push_back(1);
for (int i = 1; i <= rowIndex; i++){
int p = 1;
int temp;
for (int j = 1; j < i; j++){
temp = p;
p = ans[j];
ans[j] += temp;
}
ans.push_back(1);
}
return ans;
}
};