杨辉三角如图所示:
题目:阿里前端笔试题中有一个编程题类似于杨辉三角,只是每行数字的元素均为1。
实现思路:
可以使用二维数组实现杨辉三角。其中每一行都是一个内层数组。在输出的时候再将每一个内层数组用join()方法通过空格来分割元素并转换成字符串来输出,这样看起来就比较美观。
要想第一行居中,就根据所要输出的行数来给每一个内层数组前面添加空格。而且要考虑行数越多,下面的每一个数字的长度就越大,因此我根据最大数字的长度(即为最大行数)来给前面行的第一个数字前面加空格,达到金字塔的形状。代码如下:
function print(rowNum){
var arr = [], space = "";
for(let i = 0; i < rowNum; i++){
arr[i] = new Array(i+1);
}
for(let i = 0; i < rowNum; i++){
for(let j = 0; j <= i; j++){
arr[i][j] = 1;
}
}
for(let i = 0; i < rowNum; i++){
space = "";
for(let j = 0;j < rowNum-i-1; j++){
space +=" ";
}
console.log(space + arr[i].join(" "));
}
}
print(5);
实现杨辉三角:
实现思路:通过观察, 得出如下规律
1) 每一行设为m行, 每行上面的某个元素, 设为第n个元素
2) 每一行上面, 第一个元素为1, 最后一个元素为1
3) 第m行上面, 有m个元素
4) 第m行上面的第n个元素的值, 等于第m-1行上面第n个元素与第m-1行上面第n-1个元素的值的和
用排列组合公式表示为:C(m, n) = C(m-1, n) + C(m -1, n -1)
只需在上面的代码基础上稍作修改:
function print(rowNum){
var arr = [], space = "";
for(let i = 0; i < rowNum; i++){
arr[i] = new Array(i+1);
}
for(let i = 0; i < rowNum; i++){
for(let j = 0; j <= i; j++){
if(j==0 || i==j){
arr[i][j] = 1;
}else{
arr[i][j] = arr[i-1][j-1]+arr[i-1][j];
}
}
}
for(let i = 0; i < rowNum; i++){
space = "";
for(let j = 0;j < rowNum-i-1; j++){
space +=" ";
}
console.log(space + arr[i].join(" "));
}
}
print(5);