Javascript:Pascal's Triangle
最近在codewars上升级为了4段,难度增加了不少,出现了更多的算法题,我没有做出来,看了答案,感觉很是精妙。
##javascript解决杨辉三角问题
原题地址在 codewars
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
这就是一个杨辉三角,每个数是它上一层两个数的和。
function pascalsTriangle(n){
var pascal = [];
var idx = 0;
for(var i = 0; i<n ;i++){//遍历每一层
idx = pascal.length -i; //下边遍历时 idx并不变
for(var j = 0 ;j< i+1;j ++){ //这是具体到每一行,每一行的长度是当前行号(0开始)+1
if(j ===0 || j ==i){ //每一行第一个或最后一个都是1
pascal.push(1);
}else{
pascal.push(pascal[idx + j] + pascal[idx + j -1]);
}
}
}
return pascal
}
这个解法中i 代表的是每一层层号,而每一层的数字数量恰好是层号数量加1,比如第0行数量是1,第4行数量是5个。
而 idx代表的是上一行,在一个一维数组中,肯定不能用i代表上一层。恰好数组现存长度(开始时)减去i(上一行数量),正好是上一行第一个元素。
j代表的是正在遍历的这一行,当他是第一个或者最后一个时,它一定是一。
当它是中间值时,它恰好是上一行中j号一样的那个和前一个之和。 也就是 [idx+j]和[idx+j-1]
Written on August 26, 2015