[LeetCode] Pascal's Triangle

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]
]



还是easy题适合我,略作思考以后基本第一次就能AC。凡是遇到这种有递推性质的题目,一般的思路就是自底向上一步一步推出来,推到输入限制时返回就行了,这里有几个pascale三角的性质需要注意一下:
1.第n层有n个元素。
2.除了首位各一个1以外,其n-2个元素都满足 c[n] = p[n-1]+p[n],其中c是当前层,p是上一层。
3.第一层为{1}
理解了这三个性质,再加上递推的思想就可以写出来了。
void pascalIter(int i, int n, vector<vector<int>> &ret) {
    if (i > n) return;
    vector<int>r;
    r.push_back(1);
    vector<int> t = ret[i-2];
    for (int k = 0; k < i-2; k++) {
        r.push_back(t[k] + t[k+1]);
    }
    r.push_back(1);
    ret.push_back(r);
    pascalIter(i+1, n, ret);
}

vector<vector<int> > generate(int numRows) {
    vector<vector<int>> ret;
    if (numRows < 1) return ret;
    
    ret.push_back({1});
    if (numRows == 1) return ret;
    
    pascalIter(2, numRows, ret);
    return ret;
}
 
原文地址:https://www.cnblogs.com/agentgamer/p/4085894.html