构建Pascal三角形,使用O(k)的空间
/**
* @author johnsondu
* @problem Pascal's Triangle II
* @time O(nk)
* @space O(k)
* @url https://leetcode.com/problems/pascals-triangle-ii/
* @strategy construction problems.
* @status Accepted, beats 11.64% of cpp submissions. 0ms
* @time 15:21, Nov 6th 2015
* @require using O(k) space, the following is O(2k)
*/
class Solution {
public:
vector<int> getRow(int rowIndex) {
if(rowIndex < 0) return vector<int> {};
if(rowIndex == 0) return vector<int> {1};
if(rowIndex == 1) return vector<int> {1, 1};
int idx = 2;
vector<int> vec(rowIndex + 1, 1);
vector<int> ans(rowIndex + 1, 1);
for(int i = 2; i <= rowIndex; i ++) {
vec = ans;
ans[0] = vec[0];
for(int j = 1; j < idx; j ++) {
ans[j] = vec[j] + vec[j-1];
}
ans[idx] = 1;
idx ++;
}
return ans;
}
};
// right after is precisely O(k)
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> ans;
for(int i = 0; i < rowIndex + 1; i ++) {
ans.push_back(1);
for(int j = i-1; j > 0; i --)
ans[j] += ans[j-1];
}
return ans;
}
};