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

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;
  }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程...
    小辰带你看世界阅读 8,523评论 1 6
  • 本文来自同步博客。 P.S. 不知道简书怎么显示数学公式以及更好的排版内容。所以如果觉得文章下面格式乱的话请自行跳...
    chardlau阅读 389评论 0 0
  • 群山环绕。 穿着白色蓬衣的队伍从营地走出来,脚步整齐地走在满是落叶的山地上,却只发出轻微连绵的落叶挤压的声音。在这...
    徐湘楠阅读 1,750评论 0 1
  • 电影 以后再也不一个人看电影了,很少有一部电影能让我如此的感动,这个电影让我深深的被触动。不仅仅是它的情节,不仅仅...
    厚说历史阅读 670评论 8 8
  • 一、写作常用 引用 一盏灯, 一片昏黄; 一简书, 一杯淡茶。 守着那一份淡定, 品读属于自己的寂寞。 保持淡定,...
    静宸丶水默含声阅读 229评论 0 0