1、描述
输入一个数n,输出n行杨辉三角,例如输入5,会输出
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
2、思路
直接生成
看了题解才想起来我这属于带缓存的动态规划
4、复杂度
时间:O(N2平方)
空间:需要存每个数据所以和时间复杂度一样O(N2平方)
5、code
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<int>a; // a作为最后一层的上一层,用来求出最后一层的b
vector<int>b; // 用b作为最后一层更新,然后填充到结果集中
a.push_back(1);
b=a; // 初始化第一层
vector<vector<int>> res;
if(numRows==0) return res; // 特判0,不然出错
res.push_back(b);
if(numRows>=2)
{
res.push_back({1,1}); // 初始化第二层
a={1,1};
}
for(int i=3;i<=numRows;i++) // 目标 剩余 需要求解的层数,还要求几层,就循环几次
{
b.clear(); // 重新生成目前的最后一层
b.push_back(1);
for(int j=1;j<a.size();j++) //当前层 中间数据 通过前一层的数据生成,循环次数也是在递增,通过a的长度的动态变化 和需要求的中间数个数的对应关系,比如求第3层只需要加一次,a.size()==2
{
b.push_back(a[j-1]+a[j]);
}
b.push_back(1); //补充当前层最后一个元素
res.push_back(b); // 写入结果集
a=b; //刷新a
}
return res;
}
};