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

杨辉三角如图所示:

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值