JavaScript实现杨辉三角

284 阅读2分钟

「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」。

说在前面

在现实存在着很多有趣的数学问题和数学现象,而学过计算机的我们知道,我们通常都可以将这些问题通过编程的方式让计算机来帮我们处理计算,接下来就让我们来了解并实现一下我们小学就学过的一个有趣的数学问题:杨辉三角。

简介

杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。 [1]  杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合,是中国数学史上的一个伟大成就。

主要特征

    1. 每个数等于它上方两数之和。
    1. 每行数字左右对称,由1开始逐渐变大。
    1. 第n行的数字有n项。
    1. (a+b)n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。

代码实现

在leetcode上有一道与杨辉三角相关的题目,具体如下:

题目链接

题目链接如下,有兴趣的可以去看看 leetcode-cn.com/problems/pa…

题目描述

给定一个非负整数 numRows 生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。

示例

输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

代码实现

思路:可以直接使用一个二维数组来进行保存计算,根据杨辉三角的特征每个数等于它上方两数之和,我们可以一行一行地计算杨辉三角。每当我们计算出第 i 行的值,我们就可以在线性时间复杂度内计算出第 i+1 行的值,具体代码如下:

/**
 * @param {number} numRows
 * @return {number[][]}
 */
var generate = function(numRows) {
    let res = new Array(numRows);
    for(let i = 0; i < numRows; i++){
        res[i] = new Array(i+1);
        for(let j = 0; j <= i; j++){
            if(j == 0 || j == i){
                res[i][j] = 1;
            }else{
                res[i][j] = res[i-1][j-1] + res[i-1][j];
            }
        }
    }
    return res;
};