# 118. Pascal's Triangle

## problem description

Given a non-negative integer _numRows_, generate the first _numRows_ of Pascal's triangle.

![](https://upload.wikimedia.org/wikipedia/commons/0/0d/PascalTriangleAnimated2.gif)\
In Pascal's triangle, each number is the sum of the two numbers directly above it.

**Example:**

```
Input: 5
Output:
[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]
```

## algorithm thought

其实和之前动态规划问题得到数组中的值有的像，此位置的值等于上两个位置的值相加。可以用二维数组解决，但是这里是可以优化到只用一维数组。每次重复使用即可。

## code

```cpp
class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> res;
        if(numRows==0)
            return res;
        vector<int> tmp(1,1);
        res.push_back(tmp);
        while(--numRows){
            tmp.push_back(1);
            for(int i=tmp.size()-2;i>=1;--i){
                tmp[i]+=tmp[i-1];
            }
            res.push_back(tmp);
        }
        return res;
    }
};
```

## algorithm analysis

帕斯卡三角形，三角形面积是O(n²)的，每个点都要计算，最后时间复杂度O(n²)
