杨辉三角 II
之前有做过杨辉三角| 可以按照之前的方法做然后根据输入再输出要求的那一行
但是 本题要求空间复杂度为O(n) 因此 上述方法不行 因为要开很多数组 空间复杂度会达到O(n方)
放一下杨辉三角前几项 以便后续观察理解
1
1 1
1 2 1
1 3 3 1
本题思路:定义 初始数组res[rowIndex+1] 且数组中每一个元素的初始值为1
以rowIndex=3 res[4]为例
注意 i的作用 也就是发生行的变化 即 迭代次数 为得到最终res 需要一行一行变化
j的作用 是将前一行的值相加 来覆盖数据 res[j]= res[j]+res[j-1]
我们发现
res最开始为[1,1,1,1] 在第一步变成“下一行”时(i=1),就用前两项相加将res[1]从1变成2 得到下一行
接着,为了再得到下一行 还需要重复相加过程 用相加得到的值来覆盖原来的值
从后往前加 再覆盖原始值,这样是为了不影响“上一行”
注意:以上操作是 当rowIndex >=2 的时候,反之 直接输出res
以下是AC代码
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int> res(rowIndex+1,1);
if(rowIndex < 2)
return res;
for(int i = 1; i < rowIndex; i++)
{
for(int j = i; j > 0; j--)
res[j] = res[j] + res[j-1];
}
return res;
}
};
//格式没问题吧 没问题的话hsz记得夸夸我