LeetCode 算法:杨辉三角 c++

题目

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

示例 1:

输入: numRows = 5

输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

示例 2:

输入: numRows = 1

输出: [[1]]

提示:

1 <= numRows <= 30

杨辉三角

杨辉三角,又称帕斯卡三角形,是一种将二项式系数以三角形形式排列的数学图形。它在中国最早由北宋数学家贾宪在《释锁算术》中提出,后来南宋数学家杨辉在1261年所著的《详解九章算法》中进行了详细说明,并称之为"开方作法本源"图。杨辉三角不仅揭示了二项展开式的二项式系数的构成规律,还具有许多奇妙的性质,例如每行数字的对称性、中间数字最大等。

杨辉三角的递推公式是每个数等于它上方两个数之和,这一规律被称为杨辉三角的核心。在杨辉三角中,每行的数字之和为 2n - 1,其中 n

是行数,且第 n 行的第 m 个数可以表示为组合数 C(n-1, m-1)。

在欧洲,杨辉三角被称为帕斯卡三角形,因为法国数学家帕斯卡在1654年发现了这一规律,这比杨辉晚了393年,比贾宪晚了约600年。杨辉三角在数学、组合数学、概率论等领域都有广泛的应用,并且随着计算机技术的发展,其计算和应用变得更加便捷和高效。

另外,杨辉三角与文学中的宝塔诗和连环章等有着相似之处,展现了数学与文学的交融之美。在编程实现中,杨辉三角也较为容易构造,可以通过简单的递推算法来生成。

题解

  1. 解题思路:

杨辉三角,又称帕斯卡三角,是一个在数学中非常著名的几何图形,它由数字组成,每行的数字是上一行相邻数字的和。具体来说,杨辉三角的第0行是1,从第1行开始,每个数字是它正上方和左上方的数字之和。例如:

复制代码
   1
  1 1
 1 2 1
1 3 3 1    
1 4 6 4 1 ... 

LeetCode上的杨辉三角问题通常要求你实现一个函数,根据输入的行数返回对应的杨辉三角行。以下是解决这个问题的一种思路:

  1. 初始化 :首先,你需要一个二维数组来存储杨辉三角的每一行。数组的行数等于输入的行数rowIndex

  2. 填充第一行 :杨辉三角的第一行总是[1],所以你可以初始化数组的第一行。

  3. 填充后续行:对于每一行,除了第一个和最后一个元素(它们都是1),其他元素都是其正上方和左上方元素的和。

  4. 边界条件:注意,每一行的第一个和最后一个元素都是1,这是杨辉三角的一个特性。

  5. 返回结果:最后,返回填充好的二维数组。

  1. c++ demo:
cpp 复制代码
#include <iostream>
#include <vector>

// 函数用于生成杨辉三角的前n行
void generatePascalTriangle(int n) {
    std::vector<std::vector<int>> triangle;

    for (int i = 0; i < n; ++i) {
        std::vector<int> row(i + 1, 1); // 每行开始和结束都是1
        triangle.push_back(row);

        // 计算中间的值
        for (int j = 1; j < i; ++j) {
            triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
        }
    }

    // 打印杨辉三角
    for (const auto& row : triangle) {
        for (int num : row) {
            std::cout << num << " ";
        }
        std::cout << std::endl;
    }
}

int main() {
    int numRows;
    std::cout << "Enter the number of rows for Pascal's Triangle: ";
    std::cin >> numRows;

    generatePascalTriangle(numRows);

    return 0;
}
  • 输出结果:

Enter the number of rows for Pascal's Triangle: 9

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1 6 15 20 15 6 1

1 7 21 35 35 21 7 1

1 8 28 56 70 56 28 8 1

  1. 代码仓库地址:generatePascalTriangle
相关推荐
yong15858553439 分钟前
C++ 获取一整行(一行)字符串并转换为数字
开发语言·c++
丁总学Java10 分钟前
Spring Data JPA中的List底层:深入解析ArrayList的奥秘!!!
数据结构·数据库·list
丶Darling.28 分钟前
Day82 | 灵神 | 快慢指针 重排链表
数据结构·链表
KNeeg_1 小时前
⭐十大排序算法
java·算法·排序算法
KangkangLoveNLP1 小时前
手动实现一个迷你Llama:手动实现Llama模型
网络·人工智能·python·算法·机器学习·自然语言处理·llama
郭涤生1 小时前
Chapter 6: Concurrency in C++20_《C++20Get the details》_notes
开发语言·c++·笔记·c++20
烁3471 小时前
每日一题(小白)回溯篇4
java·开发语言·算法
White_Can1 小时前
《C++探幽:STL(string类源码的简易实现(上))》
开发语言·c++
独好紫罗兰1 小时前
洛谷题单3-P5724 【深基4.习5】求极差 最大跨度值 最大值和最小值的差-python-流程图重构
开发语言·python·算法
朝阳同学2 小时前
C++中高精度运算问题
开发语言·c++