您的位置:首页 > 其它

Pascal's Triangle II -leetcode

2013-10-05 20:17 337 查看


Pascal's Triangle II

AC Rate: 739/2353
My Submissions

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三角的性质,我们求第k行的时候,只需要用到k-1行的值,依次类推,那么我们就可以由k=1,一直递推到第k行,例:求[1,3,3,1]时,我们可以先求k=0,[1]; k=1, [1,1], 这两个可以直接给出,那么k=2时,可以利用k=1的结果,首先初始化一个存有k+1个1的vector,这样v[0]默认就是1,不需要改变,那么v[i] = v[i-1]
+ v[i], i >0,要想在原地存储结果那么就要用一个变量保存v[i]的值,依次类推,就可以得到结果了。说的不是很明白,直接上代码吧~

class Solution {
public:
vector<int> getRow(int rowIndex) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if (rowIndex < 0)
return vector<int>();
vector<int> v(rowIndex + 1, 1);
if (rowIndex < 2)
return v;

for (int i = 2; i < rowIndex + 1; ++i ) {
int pre = 1;
for (int j = 1; j < i ; ++j) {
int tmp = v.at(j); // 保存上一行的对应位置的前一个位置值
v.at(j) = pre + v.at(j);
pre = tmp;
}
}
return v;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: