JS算法-杨辉三角

简介: JS算法-杨辉三角

题目


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


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

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


题解


第一种


我们先输入行数numRows,输出一个包含numRows行数的二维数组,首先声明了一个空数组 res,这个数组是用来储存杨辉三角的,然后调用了一个名字为 sub 的递归函数,这个函数分别接收当前行数 row、总行数 numRows 和数组 arr 作为参数。事实上,这个函数就是用来生成杨辉三角的,函数首先声明一个名为 temp 的空数组,用来储存当前行的数值。如果当前行数小于总行数,开始生成杨辉三角,第一个如果判断是当 row = 0,也就是第一行。第一行只有一个1,所以直接将1 push 进 temp 数组中,接下来就是处理从第二行开始的情况,left 和 right 是当前位置的两个紧贴着的数,如果该数不在当前行的范围内,则将其视为0,于是将 left 和 right 相加,将结果 push 进 temp 数组中,这样就完成了当前行的生成,接下来将 temp 数组 push 进 arr 数组中,用来存储整个杨辉三角,然后调用 sub 函数,传入当前行数 row 加 1,总行数 numRows 和 arr 数组,开始递归,生成下一行,当递归完成后,返回 arr 数组,完成杨辉三角的生成

var generate = function(numRows) {
  let res = []
  return sub(0, numRows, res)
}
var sub = function(row, numRows, arr) {
  let temp = []
  if (row < numRows) {
    for (let i = 0; i <= row; i++) {
      if (row === 0) {
        temp.push(1)
      } else {
        let left = i-1 >= 0 ? arr[row-1][i-1] : 0
        let right = i < arr[row-1].length ? arr[row-1][i] : 0
        temp.push(left+right)
      }
    }
    arr.push(temp)
    sub(++row, numRows, arr)
    return arr
  }
}


第二种


根据输入的行数numRows,生成一个杨辉三角形状的二维数字数组。其中,第一行是[1],第二行是[1,1],第三行是[1,2,1],依此类推。每个数字是由上一行相邻两个数字相加而来。我们可以通过循环和条件判断来实现这个生成过程。首先,我们创建一个由numRows个子数组组成的二维数组arr。其中,每个子数组的长度为索引值加一,每个元素的初始值都为1,接着,我们通过两层循环来遍历二维数组,并计算每个元素的值。具体来说,外层循环控制行数i,内层循环控制列数j。在每次循环中,我们判断当前的坐标(i,j)是否符合条件,即i>1j>0j<i+1。如果符合条件,就根据公式arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]来计算当前元素的值。这个公式表示当前元素的值等于上一行左侧元素和上一行当前位置元素之和。最终,我们返回得到的二维数组arr。

var generate = function (numRows) {
  const arr = Array.from({ length: numRows }, (_, i) =>
    Array.from({ length: i + 1 }, (_, i) => 1)
  );
  for (let i = 0; i < numRows; i++) {
    for (let j = 0; j < i; j++) {
      if (i > 1 && j > 0 && j < i + 1) {
        arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
      }
    }
  }
  return arr;
};
相关文章
|
4月前
|
存储 监控 算法
局域网监控其他电脑的设备信息管理 Node.js 跳表算法
跳表通过分层索引实现O(logn)的高效查询、插入与删除,适配局域网监控中设备动态接入、IP映射及范围筛选等需求,相比传统结构更高效稳定,适用于Node.js环境下的实时设备管理。
169 9
|
6月前
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
246 0
|
4月前
|
存储 监控 JavaScript
企业上网监控系统的恶意 URL 过滤 Node.js 布隆过滤器算法
布隆过滤器以低内存、高效率特性,解决企业上网监控系统对百万级恶意URL实时检测与动态更新的难题,通过概率性判断实现毫秒级过滤,内存占用降低96%,适配大规模场景需求。
296 3
|
4月前
|
存储 监控 算法
电脑管控软件的进程优先级调度:Node.js 红黑树算法
红黑树凭借O(log n)高效插入、删除与查询特性,适配电脑管控软件对进程优先级动态调度的高并发需求。其自平衡机制保障系统稳定,低内存占用满足轻量化部署,显著优于传统数组或链表方案,是实现关键进程资源优先分配的理想选择。
238 1
|
5月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
312 3
|
5月前
|
数据采集 算法
TsingtaoAI摘得长三角算力算法创新大赛冠军
在2025年长三角(芜湖)算力算法创新应用大赛的颁奖典礼上,TsingtaoAI团队凭借“通用具身智能PoC实验底座研发及产业化”项目,摘得数据赛道冠军。这一赛事于9月23日在芜湖市隆重举行,由芜湖市人民政府主办,芜湖市数据资源管理局、市委人才局和市科技局承办。
135 0
|
9月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
220 4
|
9月前
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
232 3
|
算法 JavaScript 前端开发
JavaScript算法和数据结构:写一个二分查找的函数。
JavaScript算法和数据结构:写一个二分查找的函数。
128 0
|
消息中间件 算法 JavaScript
JavaScript算法和数据结构:描述一下栈和队列的特点及应用场景。
JavaScript算法和数据结构:描述一下栈和队列的特点及应用场景。
241 0

热门文章

最新文章