js循环实现杨辉三角
使用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;
}
注意事项:

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






