美文网首页
LeetCodeDay32 —— 杨辉三角(帕斯卡三角形)★

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

作者: GoMomi | 来源:发表于2018-05-10 13:14 被阅读0次

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

    描述
    • 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
    • 在杨辉三角中,每个数是它左上方和右上方的数的和。
    示例
      输入: 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;
      }
    };
    

    相关文章

      网友评论

          本文标题:LeetCodeDay32 —— 杨辉三角(帕斯卡三角形)★

          本文链接:https://www.haomeiwen.com/subject/nguzrftx.html