简单
给定一个非负索引 rowIndex
,返回「杨辉三角」的第 rowIndex
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: rowIndex = 3
输出: [1,3,3,1]
示例 2:
输入: rowIndex = 0
输出: [1]
示例 3:
输入: rowIndex = 1
输出: [1,1]
提示:
0 <= rowIndex <= 33
进阶:
你可以优化你的算法到 O(rowIndex)
空间复杂度吗?
题解: 使用滚动数组解决问题
第i
行的数据由i-1
行的数据计算得到 i+1
行的数据由第i
行的数据计算得到
在计算第i+1
行的数据时,第i-1
行及以后行的数据将不会使用
我们将i+1
行的数据存储在i-1
行上以节省内存
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int>Temp2;
if(rowIndex<2){//前两行特殊处理
for(int i=0;i<=rowIndex;i++){
Temp2.push_back(1);
}
return Temp2;
}
vector<int>Temp1={1,1};//已知行
for(int i=1;i<rowIndex;i++){
Temp2.clear();//将i-1行清空
Temp2.push_back(1);//第一位的固定值
for(int j=0;j<i;j++)
Temp2.push_back(Temp1[j]+Temp1[j+1]);
Temp2.push_back(1);//最后一位的固定值
Temp1.swap(Temp2);//交换,以继续使Temp1为已知行,Temp2为待计算行
}
return Temp1;
}
};