版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/maotianyi941005/article/details/84945385
1 普通思路
根据定义,用一个vector存前一行的数据,后一行根据前一行计算 存一个二维vec 并返回
//118
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> vec;
for(int i = 0;i < numRows;i++){
vector<int> vector1;
vector1.push_back(1);
for(int j = 1;j < i ; j++){
vector1.push_back(vec[i-1][j-1] + vec[i-1][j]);
}
if(i != 0) vector1.push_back(1);
vec.push_back(vector1);
}
return vec;
}
};
119:按要求返回rowIndex行, 注意这里的行从0开始计
//119
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<vector<int>> vec;
for(int i = 0;i < rowIndex+1;i++){
vector<int> vector1;
vector1.push_back(1);
for(int j = 1; j < i ; j++){
vector1.push_back(vec[i-1][j-1] + vec[i-1][j]);
}
if(i != 0) vector1.push_back(1);
vec.push_back(vector1);
}
return vec[rowIndex];
}
};
2 优化空间复杂度O(k)
用119为例,118同理
rowIndex= 4的时候,由第三行1 3 3 1 如何求1 4 6 4 1
1 3 3 1
+ 1 3 3 1
————————
= 1 4 6 4 1
so 解法:将前一行resize(i+1 ,1),即在末尾加一个位 并赋值为1,1 3 3 1 -》 1 3 3 1 x 赋值1-》 1 3 3 1 1
从倒数第二个往前遍历
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> vec = {1};
if(rowIndex == 0) return vec;
for(int i = 1;i < rowIndex+1;i++){
vec.resize(i+1,1);
for(int j = i - 1 ;j >=1 ;j--){
vec[j] = vec[j] + vec[j - 1];
}
}
return vec;
}
};