当前位置:首页 > JavaScript

js循环实现杨辉三角

2026-04-05 01:45:00JavaScript

使用JavaScript实现杨辉三角

杨辉三角是一个经典的数学图形,可以通过二维数组或嵌套循环实现。以下是几种常见的方法:

基础循环实现

通过双重循环构建二维数组,外层循环控制行数,内层循环计算每行的数值:

function generatePascalTriangle(numRows) {
  const triangle = [];
  for (let row = 0; row < numRows; row++) {
    triangle[row] = [];
    triangle[row][0] = 1; // 每行首尾为1
    for (let col = 1; col < row; col++) {
      triangle[row][col] = triangle[row-1][col-1] + triangle[row-1][col];
    }
    if (row > 0) triangle[row][row] = 1; // 每行末尾为1
  }
  return triangle;
}
console.log(generatePascalTriangle(5));

优化空间复杂度

利用前一行计算当前行,减少空间占用:

function pascalTriangle(n) {
  let result = [];
  let prev = [1];
  for (let i = 1; i <= n; i++) {
    let curr = [1];
    for (let j = 1; j < i; j++) {
      curr[j] = prev[j-1] + prev[j];
    }
    curr.push(1);
    result.push(prev);
    prev = curr;
  }
  return result;
}

格式化输出

将生成的数组格式化为三角形输出:

function printPascalTriangle(numRows) {
  const triangle = generatePascalTriangle(numRows);
  const maxWidth = Math.max(...triangle[triangle.length-1]).toString().length + 1;

  triangle.forEach(row => {
    let line = '';
    const padding = ' '.repeat((triangle.length - row.length) * maxWidth / 2);
    line += padding;
    row.forEach(num => {
      line += num.toString().padStart(maxWidth, ' ');
    });
    console.log(line);
  });
}
printPascalTriangle(6);

递归实现(非循环)

虽然题目要求循环实现,但递归方案可作为对比参考:

function pascalRecursive(row, col) {
  if (col === 0 || col === row) return 1;
  return pascalRecursive(row-1, col-1) + pascalRecursive(row-1, col);
}

function generateTriangleRecursive(rows) {
  const triangle = [];
  for (let i = 0; i < rows; i++) {
    triangle[i] = [];
    for (let j = 0; j <= i; j++) {
      triangle[i][j] = pascalRecursive(i, j);
    }
  }
  return triangle;
}

注意事项:

js循环实现杨辉三角

  • 基础实现的时间复杂度为O(n²),空间复杂度为O(n²)
  • 边界条件处理需确保每行首尾元素为1
  • 格式化输出时需考虑数字位数对齐

标签: 杨辉三角js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…