题目
Given numRows, generate the first numRows of Pascal's triangle.
For example, given numRows = 5,
Return
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
大致意思
这个为杨辉三角。我们可以看出,从第三行开始,排除最左和最右的两个数字,它的每一个数字都是通过上一行两边的数字相加得到。
array[2][1] = array[1][0] + array[1][1]
array[3][1] = array[2][0] + array[2][1]
array[3][2] = array[2][1] + array[2][2]
解决方案
- 根据有多少行,进行多少次的循环
- 如果是第一行和第二行的话,直接把对应数据push进去
while (index <= numRows) {
if (index === 1) {
array.push([1]);
} else if (index === 2) {
array.push([1, 1]);
} else {
...
}
index++;
}
- 如果是第三行及其以上,根据上一行的数据进行遍历
var arr = [1];
var dataArr = array[index - 2];
var left = dataArr[0], right;
for (var i = 1; i < dataArr.length; i++) {
right = dataArr[i];
arr.push(left + right);
left = right;
}
arr.push(1);
array.push(arr);
源代码
var generate = function(numRows) {
var array = [];
var index = 1;
while (index <= numRows) {
if (index === 1) {
array.push([1]);
} else if (index === 2) {
array.push([1, 1]);
} else {
var arr = [1];
var dataArr = array[index - 2];
var left = dataArr[0], right;
for (var i = 1; i < dataArr.length; i++) {
right = dataArr[i];
arr.push(left + right);
left = right;
}
arr.push(1);
array.push(arr);
}
index++;
}
return array;
};