题目

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