LeetCodeDay32 —— 杨辉三角(帕斯卡三角形)★

2018-05-10  本文已影响0人  GoMomi

118. 杨辉三角(帕斯卡三角形)

描述
示例
  输入: 5
  输出:
    [
        [1],
        [1,1],
      [1,2,1],
      [1,3,3,1],
    [1,4,6,4,1]
    ]
思路
  1. 直接根据杨辉三角的定义来实现,A[row][i] = A[row - 1][i - 1] + A[row - 1][i]
  2. 上述思路每次需要清空临时的Vector, LeetCode上看到的一个更好的解法,每次都往vec中加一个1,然后把中间的元素按照要求替换,这样两头就一直是1了,也不用清空。效率更好。
class Solution_118_01 {
 public:
  vector<vector<int>> generate(int numRows) {
    vector<vector<int>> pascalTri;
    vector<int> vec;
    for (int row = 0; row < numRows; ++row) {
      vec.clear();
      vec.push_back(1);
      for (int i = 1; i < row; ++i) {
        vec.push_back(pascalTri[row - 1][i - 1] + pascalTri[row - 1][i]);
      }
      if (row != 0) vec.push_back(1);
      pascalTri.push_back(vec);
    }
    return pascalTri;
  }
};

class Solution_118_02 {
 public:
  vector<vector<int>> generate(int numRows) {
    vector<vector<int>> pascalTri;
    vector<int> vec;
    for (int row = 0; row < numRows; ++row) {
      vec.push_back(1);
      if (row != 0) {
        for (int k = 1; k < vec.size() - 1; ++k) {
          vec[k] = pascalTri[row - 1][k - 1] + pascalTri[row- 1][k];
        }
      }
      pascalTri.push_back(vec);
    }
    return pascalTri;
  }
};
上一篇下一篇

猜你喜欢

热点阅读