【Hot 100】118. 杨辉三角

目录

  • 引言
  • 杨辉三角
    • 我的解题
    • 代码优化
      • 优化说明

请添加图片描述

  • ‍♂️ 作者:海码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;
    }
};

代码优化

可以进行以下优化:

  1. 边界条件处理:增加对 numRows=0 的特殊情况处理
  2. 代码简洁性:使用更直观的循环结构
  3. 空间利用:直接初始化结果向量大小,避免动态扩容
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;
    }
};

优化说明

  1. 边界处理

    • 第一行添加了 numRows=0 的判断,返回空向量
    • 避免原始代码在 numRows=0 时返回 {{1}} 的错误
  2. 循环结构优化

    • 使用标准 for 循环替代 while,更符合遍历行数的语义
    • 外层循环直接控制行数 0 → numRows-1
    • 内层循环控制列数 1 → i-1(跳过首尾固定为1的元素)
  3. 空间预分配

    • 直接初始化 resnumRows 大小
    • 每行初始化时直接创建 i+1 个元素并设初值1
    • 避免动态扩容开销,提高性能
  4. 索引简化

    • 直接使用 i 作为行索引,j 作为列索引
    • 省去 res.size()-1 的计算,代码更清晰

你可能感兴趣的:(算法,算法,Hot100,leetcode,c++)