阿里前端笔试题之类似实现杨辉三角

杨辉三角如图所示:

阿里前端笔试题之类似实现杨辉三角_第1张图片

题目:阿里前端笔试题中有一个编程题类似于杨辉三角,只是每行数字的元素均为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);

阿里前端笔试题之类似实现杨辉三角_第2张图片

实现杨辉三角:

实现思路:通过观察, 得出如下规律

    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);

阿里前端笔试题之类似实现杨辉三角_第3张图片

你可能感兴趣的:(前后端笔试题汇总)