题目来源
题目描述
题目解析
模拟
vector<int> getRow(int rowIndex) {
vector<vector<int>> c(rowIndex + 1);
for (int i = 0; i <= rowIndex; ++i) {
c[i].resize(i + 1);
c[i][0] = c[i][i] = 1 ;
for (int j = 1; j < i; ++j) {
c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
}
}
return c[rowIndex];
}
注意到对第 i+1 行的计算仅用到了第 i 行的数据,因此可以使用滚动数组的思想优化空间复杂度。
vector<int> getRow(int rowIndex) {
vector<int> pre, curr;
for (int i = 0; i <= rowIndex; ++i) {
curr.resize(i + 1);
curr[0] = curr[i] = 1;
for (int j = 1; j < i; ++j) {
curr[j] = pre[j - 1] + pre[j];
}
pre = curr;
}
return curr;
}
类似题目
题目 | 思路 |
---|---|
leetcode:118. 杨辉三角 | |
leetcode:119. 杨辉三角 II |