- ♂️ 作者:海码007
- 专栏:算法专栏
- 标题:【Hot 100】118. 杨辉三角
- ❣️ 寄语:书到用时方恨少,事非经过不知难!
- 题目链接:
- 做题状态:
这道题目也不难,就是当前层的计算是基于上一层两个元素值,代码如下:
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> res = {{1}}; // 创建第一行
// 从第二行开始循环
while(res.size() < numRows)
{
vector<int> row(res.size() + 1, 1); // 创建当前行,并初始化
// 计算中间元素值
for (int i = 1; i < row.size() - 1; ++i)
{
// 当前层的元素值是基于上一层两个元素计算
row[i] = res[res.size()-1][i-1] + res[res.size()-1][i];
}
res.push_back(row);
}
return res;
}
};
可以进行以下优化:
numRows=0
的特殊情况处理class Solution {
public:
vector<vector<int>> generate(int numRows) {
if (numRows == 0) return {};
vector<vector<int>> res(numRows);
for (int i = 0; i < numRows; ++i) {
res[i] = vector<int>(i + 1, 1); // 初始化当前行
// 计算中间元素(跳过首尾元素)
for (int j = 1; j < i; ++j) {
res[i][j] = res[i - 1][j - 1] + res[i - 1][j];
}
}
return res;
}
};
边界处理:
numRows=0
的判断,返回空向量numRows=0
时返回 {{1}}
的错误循环结构优化:
for
循环替代 while
,更符合遍历行数的语义0 → numRows-1
1 → i-1
(跳过首尾固定为1的元素)空间预分配:
res
为 numRows
大小i+1
个元素并设初值1索引简化:
i
作为行索引,j
作为列索引res.size()-1
的计算,代码更清晰