目录
- 引言
- 杨辉三角
- 我的解题
- 代码优化
- 优化说明
- 🙋♂️ 作者:海码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
的计算,代码更清晰
- 直接使用