程序书算法精题–JS版
- 打印出杨辉三角形
分析
- 杨辉三角的样子:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
…
每个数等于它上方两数之和。
每行数字左右对称,由1开始逐渐变大。
第n行的数字有n项。
前n行共[(1+n)n]/2 个数。
这个杨辉三角可以这样装进数组中: arr = [[1], [1,1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1],…]
源码
function fn(n) {
// 先声明一维数组
let arr = [];
for (let i = 0; i < n; i++) {
// 再声明二维数组
arr[i] = new Array(i+1);
}
for (let i = 0; i < n; i++) {
// 计算每个值装入数组中
for (let j = 0; j <= i; j++) {
// 左右边都为1
if (j == 0 || j == i) {
arr[i][j] = 1;
} else {
// 关键: 每个数等于它上方两数之和
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
}
console.log(arr);
// 打印杨辉三角
for(let i= 0; i < n; i++) {
let str = '';
for (let j = 0; j < n - i - 1; j++) {
str += ' ';
}
console.log(str + arr[i]);
}
}
// 输入行
fn(5);
console